shell特殊变量
$0 当前脚本的文件名
$n 传递给脚本或函数的参数; n 是一个数字,表示第几个参数;也可以用于函数的参数
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
$* 和 $@ 的区别:
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以"$1" "$2" … "$n" 的形式输出所有参数
当它们被双引号""包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
运算符
算术运算符:+ - * / % = == !=
关系运算符:-ne -eq -gt -lt -ge -le
布尔运算符:!(非) -o(或) -a(与)
字符串运算符:== != -z(空) -n(非空)
文件测试操作:
-e 文件是否存在
-f 是否为普通文件
-d 是否为目录
-w 是否具有写权限
-x 是否具有执行权限
条件语句
if <condition>; then
<statement>
fi
if <condition> ; then
<statement>
elif <condition>; then
<statement>
else
<statement>
fi
case <variable> in <range>
<value>)
<statement>
;;
esac
循环语句
while <condition>; do
<statement>
done
for <variable> in <range>; do
<statement>
done
shell函数
function <function_name>() {
<statement>
}
函数调用以及传参: <function_name> <para1> <para2>...<paran>
shell替换
`` <=> $() 命令替换
$ 、${} 变量替换,一般情况下没有区别
$(()) 其中的变量名称,可于其前面加 $ 符号来替换,也可以不用
[[是 bash 程序语言的关键字,支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式;
字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,而[]内不能使用正则
set -e 用法
当命令以非零状态退出时,则退出shell
主要作用是当脚本执行出现意料之外的情况时立即退出,避免错误被忽略,导致最终结果不正确
一般放在shell脚本开始位置(位于 #!/bin/bash 之后)
<<<
<<< 被称为here-string,用于给程序预先设置一个文本字符串,从而避免在程序运行过程中手动键入文本。
cat <<< “TEST”# 打印文本 TEST
xargs rm –rf <<< “a.h b.h c.h”# 删除文件 a.h b.h c.h
=~
=~ 为正则匹配,用来判断右边的参数是否符合左边的要求。
[[ "tongyishu" =~ [0-9] ]] # 不匹配,未包含数字
echo $? # output 1
[[ "tong123yishu" =~ [0-9] ]] # 匹配,包含数字
echo $? # output 0
sh -c
sh -c 可以让 bash 将一个字符串作为一个完整的命令来执行
sh -c "echo tongyishu" # 输出 tongyishu