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 ' ' 解释转义
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
" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f
" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f
" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f
" 郭芙 女 47.9876
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
10. awk
$ awk '{print $1,$4}' log.txt