1. 来自于shell 13问

提问:cd /etc/aa/bb/cc可以执行 但是把这条命令放入shell脚本后,shell脚本不执行! 这是什么原因?

其实我不太知道是什么意思, 但是这个问题要问的是source, exec, fork的区别

概念解释fork: fork是在已有的shell的基础上,又启动一个新的sub-shell,彼此互不干扰, 即使是export $x.

概念解释exec: exec是在以后shell的基础上, 继续启动分片shell, 但是这个分片结束了, 整个shell都都结束了

概念解释: source/. 是在shell的基础上, 又有一个shell, 在此原来shell的上面继续执行, 互相干扰。

例子

1.sh

#!/bin/bash 

A=B 
echo "PID for 1.sh before exec/source/fork:$$"

export A
echo "1.sh: \$A is $A"

case $1 in
        exec)
                echo "using exec..."
                exec ./2.sh ;;
        source)
                echo "using source..."
                . ./2.sh ;;
        *)
                echo "using fork by default..."
                ./2.sh ;;
esac

echo "PID for 1.sh after exec/source/fork:$$"
echo "1.sh: \$A is $A"

  2.sh

#!/bin/bash

echo "PID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"

A=C
export A
echo "2.sh: \$A is $A"

  

$ ./1.sh source
PID for 1.sh before exec/source/fork:231
1.sh: $A is B
using source...
PID for 2.sh: 231
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:231
1.sh: $A is C


$ ./1.sh exec
PID for 1.sh before exec/source/fork:235
1.sh: $A is B
using exec...
PID for 2.sh: 235
2.sh get $A=B from 1.sh
2.sh: $A is C


$ ./1.sh fork
PID for 1.sh before exec/source/fork:239
1.sh: $A is B
using fork by default...
PID for 2.sh: 240
2.sh get $A=B from 1.sh

 

2. 如何清空log

find -mtime +365 -name "*.log" exec rm -rf

or

find -mtime +7 -name "*.log" | xargs rm -rf 

3. 如何发邮件

echo $attachment echo "email content" | mail -to hello@12,com

4. 获取文件的个数

list=`ls /tmp`

count=$list|wc -l //l是行数

5. 获取最新的文件

find -type f -name "*" | sort| head -n 1 // sort默认是按照字母或者数字从下往上, f是按照时间从新往旧

6. 引号的问题

单引号 => 硬引号。 所以A=B; echo ‘aa $A’  将输出 aa $A

双引号 => 软引号。 所以A=B; echo "aa $A" ,将输出 aa B

backquote => 这里``将执行里面的内容, echo `aa $A` aa has error, not defined

echo -e '\n' 解释转义

echo -n "sss" 最后不换行

7. 获取格式化日期

DATE=`date -d '7 day ago' +%Y-%m-%d`

 echo the last sunday is $(date -d "last sunday" +%Y-%m-%d)

8. 获取执行的log,错误日志等

./1.sh /dev/null 2>log 错误输出到log文件

./1.sh /dev/null 2>&1 错误输出到标准输出

9. 格式化输出

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

 

姓名     性别   体重kg
郭靖           66.12
杨过           48.65
郭芙           47.99

10. awk

 $ awk '{print $1,$4}' log.txt
posted on 2021-03-04 23:04  connie313  阅读(43)  评论(0编辑  收藏  举报