目录

Shell 笔记

变量处理

变量缺省值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#aa=
a=${aa:-1}
echo "a:$a, aa:$aa" # a:1, aa:

#bb=
b=${bb:=2}
echo "b:$b, bb:$bb" # b:2, bb:2

cc=33
c=${cc:+3}
echo "c:$c, cc:$cc" # c:3, cc:33

d=
d=${d:?4}
echo $d # c为空 -> 4 -> stderr && exit 1

变量截取

file=/dir1/dir2/dir3/my.file.txt

  • ${file#_/}:删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt
  • ${file##_/}:删掉最后一个/及其左边的字符串:my.file.txt
  • ${file#*.}:删掉第一个. 及其左边的字符串:file.txt
  • ${file##_.}:删掉最后一个.及其左边的字符串:txt
  • ${file%%/*}:删掉第一个/及其右边的字符串:(空值)
  • ${file%/_}:删掉最后一个/及其右边的字符串:/dir1/dir2/dir3
  • ${file%%._}:删掉第一个 .及其右边的字符串:/dir1/dir2/dir3/my
  • ${file%._}:删掉最后一个.及其右边的字符串:/dir1/dir2/dir3/my.file

# 删掉左边,% 删掉右边

字符串替换

1
2
3
4
5
address="www.google.com.com"
printf "%s\n" "$address"

printf "%s\n" "${address/.com/.org}"  # www.google.org.com
printf "%s\n" "${address//.com/.org}" # www.google.org.org

每 x 秒处理

1
while :;do date; sleep $(date +%s.%N | awk "{print 5 - (\$1 % 5)}");done;