---恢复内容开始---
1 test命令中不能使用浮点小数值,如:
A=1.444444;[ $A -gt 1 ]
2 test命令中的>或<必须转义,否则shell会把它们当做重定向符号而把字符串当做文件名来创建,如:[ $A \> $B ]
3 在test命令中大写字母会被当成小于小写字母的,这与sort命令相反。
4 复合条件测试,如:
[ -d /etc ] && [ -f /etc/passwd ]
[ -d /etc -a -f /etc/passwd ]
[[ -d /etc && -f /etc/passwd ]]
[ -d /etc ] || [ -f /etc/passwd ]
[[ -d /etc || -f /etc/passwd ]]
[ -d /etc -o -f /etc/passwd ]
5 if-then语句的高级特性:用于数学表达式的"(( ))";用于高级字符串处理功能(模式匹配)的"[[ ]]"
6 for语句都去列表中的复杂值
shell看到了列表之中的单引号并尝试使用他们来定义一个单独的数据值,造成混乱,解决办法:1使用\将单引号转义;2使用双引号来定义用到单引号的值,如:for test in I don\'t know if "this'll" work
如果变量的取值包含空格,要容纳这种值,应将变量用双引号括起来,如:if [ -f "$test" ]
c语言风格的for循环:for ((i=1;i<=10;i++))
do
commands
done
for ((a=1,b=10;a<=10;a++,b--))
do
commands
done
7 命令行参数: $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} 最后一个参数变量值${!#};
$*变量会将所有命令行参数当成一个整体的单个参数,而$@变量会单独处理命令行每个参数。
8 echo -e "\a" (哗哗声)
内部变量:计算脚本执行时长$SECONDS
9 selsect
select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
select var in ... ; do
done
.... now $var can be used ....
例子:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
该脚本运行结果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
注意:select是扩展应用。
10 SECONDS 当前运行的bash进程的运行时间(以秒为单位)
11 在同一行里用空白字符隔开为多个变量赋值是可以的。
如果给变量赋的值中有空白字符,引号是必须的。
从字符串的右边结尾处提取?echo ${stringZ: -4}
12 子串替换:
- ${string/substring/replacement}
-
用$replacement替换由$substring匹配的字符串。
- ${string//substring/replacement}
-
用$replacement替换所有匹配$substring的字符串。
1 stringZ=abcABC123ABCabc 2 3 echo ${stringZ/abc/xyz} # xyzABC123ABCabc 4 #用'xyz'代替第一个匹配的'abc'. 5 6 echo ${stringZ//abc/xyz} # xyzABC123ABCxyz 7 # 用'xyz'代替所有的'abc'.
- ${string/#substring/replacement}
-
如果$string字符串的最前端匹配$substring字符串,用$replacement替换$substring.
扫描二维码关注公众号,回复: 4187931 查看本文章 - ${string/%substring/replacement}
-
如果$string字符串的最后端匹配$substring字符串,用$replacement替换$substring.
1 stringZ=abcABC123ABCabc 2 3 echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc 4 # 用'XYZ'替换前端的'abc'. 5 6 echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ 7 # 用'XYZ'替换后端的'abc'.
13 while (( a <= LIMIT )) # 双圆括号, 变量前边没有"$".
14 生成指定范围的随机数和字符串,脚本如下:
#!/bin/bash
count=$[$2-$1+1]
#num=$(date +%s%N)
echo $[$RANDOM%$count+$1]
#使用date 生成随机字符串
date +%s%N | md5sum | head -c 10
#使用 /dev/urandom 生成随机字符串
cat /dev/urandom | head -n 10 | md5sum[cksum] | head -c 10
#使用命令expect包提供的复杂密码生成工具mkpasswd
#
echo $RANDOM | md5sum
15 wc -c 命令计算字符长度时会加上单词间空格,制表符,换行符
16 date -d "1 day ago" +'%Y-%m-%d' 或 date --date="1 day ago" +'%Y-%m-%d'
date -d "10 day ago" +'%Y-%m-%d'
date -d "1 month ago" +'%Y-%m-%d'
date -d "1 year ago" +'%Y-%m-%d'
17 command1 || {
command2;command3;......
}
18 if command1;command2;command...
then
....
fi
---恢复内容结束---