# - 为注释
$ - 引用变量
$0...$9 - ShellScript 的参数
$# - 参数的个数
$$ - Process ID, 取自己的进程号
$? - Shell CMD 执行完成的退出状态
$*和$@ - 参数本身的列表,在传递当前参数给调用函数的时候,特别有用。
$() - 执行Shell命令 等同于 ``
; 分割语句, For example:
if condition; then
elif condition; then
else
fi
sh -x scriptname 调试shell
文件判断
-d file 文件是目录吗?
-f file 文件是规则文件吗?
-r file 运行脚本的用户是否有读权限
-w file 运行脚本的用户是否有写权限
-x file 运行脚本的用户是否有执行权限
-s file 文件的长度是否大于0
条件运算
-a : 与运算
-0 : 或运算
! : 非运算
字符串运算
-n string - 如果string 有值(不为空), 返回true
-z string - 如果string没有值(为空), 返回True
string1 = string2 - 两个string相同, 返回True
string1 != string2 - 两个string不相同, 返回True
整数运算
int1 -eq int2 等于
int1 -ne int2 不等于
int1 -gt int2 大于
int1 -ge int2 大于等于
int1 -lt int2 小于
int1 -le int2 小于等于
算术执行
expr 5 + 4
expr 5 - 4
expr 5 /* 4
expr 5 / 4
expr 5 % 4
字符串的替换模式
${parameter} 使用例子path : /tmp/${file}_text.
${parameter:-word} 参数变量存在,返回参数值,参数不存在,返回word
${parameter:=word} 参数变量存在,返回参数值,参数不存在,返回word,并且设置参数值为word.
${parameter:?word} 参数变量存在, 输出参数值, 否则, 输出word;如果word也没有,输出标准错误
${parameter:+word} 参数变量存在,输出word, 否则, 不输出;
${parameter#pattern} 移去第一个相匹配pattern
${parameter##pattern} 移去所有相匹配pattern
${parameter%pattern} 和#的方向相反 (从右到左)
${parameter%%pattern} 和##的方向相反(从右到左)
例子:
${parameter#*/} 移去第一个"/"前的所有的字符 包括"/"
${parameter##*/} 移去最后一个"/"前的所有的字符 包括"/"
${parameter%*/} 和#的方向相反 (从右到左)
${parameter%%*/} 和##的方向相反(从右到左)