本文共 2881 字,大约阅读时间需要 9 分钟。
#!/bin/bash
for ((i=0;i<5;i++));do
{
sleep 3;echo 1>>aa && echo "done!"
} &
done
wait
cat aa|wc -l
rm aa
这个实例实际上就在上面基础上多加了一个后台执行&符号,此时应该是5个循环任务并发执行,最后需要3s左右时间。
wait是等待前面的后台任务全部完成才往下执行,否则程序本身是不会等待的,这样对后面依赖前面任务结果的命令来说就可能出错。例如上面wc -l的命令就报错:不存在aa这个文件。
1 字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当串str1为非空时为真2 数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真 int1 -gt int2 int1大于int2为真 int1 -ge int2 int1大于等于int2为真 int1 -lt int2 int1小于int2为真 int1 -le int2 int1小于等于int2为真3 文件的判断
-r file 用户可读为真
-w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真3 复杂逻辑判断
-a 与
-o 或 ! 非
删除空格 :
sed s/[[:space:]]//g filename
删除空行 :
sed /^$/d filename
删除或html标签 :
删除: sed -e 's/<[^>]*>//g'
匹配: grep -Eo "<[^>]*>"
上面的正则无法处理标签中含有> 的情况(如:< input name=dir value="> " >)。改进后的为:
匹配:grep -Eo "<(/"[^/"]*/"|'[^']*'|[^'/">])*>"
合并第一列相同的行:
awk '{if($1 in a){printf "|"$2}else{printf "%s%s %s", (NR>1)?"/n":"", $1, $2;a[$1]=$2}}END{print ""}'
合并两个文件同行的列:
paste file1 file2
pr -m -t -s/ file1 file2
添加分隔符合并文件:
paste -d '*'
-d符号就可以设定间隔符
paste -s -d "*"
-s就是以每个文件为一个处理单元
split
-l LINES 指定分割后每个文件行数
-b BYTES 指定分割后每个文件大小
数值加减:
for((i = 0; i <= 10; i++)); do ni=$(($i + 1)) echo "ni="$ni ni=$(expr $i + 1) echo "ni="$ni ni=`expr $i + 1` echo "ni="$ni done
注意:=号两边不能有空格,expr后的算式运算符两边必须有空格隔开。
补齐0
echo 1 | awk '{for(i=1;i<13;i++){printf "%.3d/n",i}}'
echo 1 | awk '{for(i=1;i<13;i++){print "0000"i}}' | rev | cut -c -3 | rev
休眠sleep:
sleep 1 睡眠1秒
sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时
Sort
-g 可排序科学记数法表示的
-S 设置使用内存
-T 临时文件保存目录
n=60
while [ ${n} -gt 4 ]; do echo ${n} m=`expr ${n} - 7` while [ ${m} -ge 4 ]; do echo ${n}" "${m} m=`expr ${m} - 7` done n=`expr ${n} - 7` done