运算符 替换
${varname:-word} 如果varname存在且非null,则返回其值;否则,返回word.
用途:如果变量未定义,则返回默认值。
范例:如果count未定义,则${count:-0}的值为0.
${varname:=word} 如果varname存在且不是null,则返回它的值;否则,设置它为word,
并返回其值。
用途:如果变量未定义,则设置变量为默认值。
范例:如果count为被定义,则${count:=0}设置count为0.
${varname:?message} 如果varname存在且非null,则返回他的值;否则,显示 varname:message,并退出当前的命令或脚本。省略message会出现 默认信息parameter null or not set 。注意,在交互式shell下
不需要退出(在不同的shell间会有不同的行为,用户需要自行注意)。
${varname:+word} 如果varname存在且非null,则返回word;否则,返回null。
用途:为测试变量的存在。
范例:如果count已定义,则${count:+1}返回1(也就是“真”)。
模式匹配运算符
运算符 替换
${variable#pattern} 如果模式匹配于变量值的开头处,则删除匹配的最短部分,并
返回剩下的部分
${path#/*/} 结果:tolstoy/mem/long.file.name
${variable##pattern} 如果模式匹配于变量值的开头处,则删除匹配的最长部分,并
返回剩下的部分。
${path##/*/} 结果:long.file.name
${variable%pattern} 如果模式匹配于变量值的结尾处,则删除匹配的最短部分,并
返回剩下的部分
${path%.*} 结果:/home/tolstoy/mem/long.file
${variable%%pattern} 如果模式匹配于变量值的结尾处,则删除匹配的最长部分,并
返回剩下的部分。
${path%%.*} 结果:/home/tolstoy/mem/long
$# 提供传递到shell脚本或函数的参数总数。
while [ $# !=0 ] 以shift逐渐减少$#,循环将会终止
do
case $1 in
.... 处理第一个参数
shift 移开第一个参数
done
$* $@ 一次
$* 将所有命令行参数视为单个字符串。等同于"$1 $2 ...."
$@ 将所有命令行参数视为单独的个体,也就是单独字符串。等同于"$1" "$2" "$3"
$? 前一命令的退出状态。
$$ shell进程的进程编号(process ID).
$0 shell程序的名称。
$! 最近一个后台命令的进程编号。以此方式存储进程编号,可通过wait命令以供稍后
使用。
ENV 一旦引用,则仅用于交互式shell中;$ENV的值是可展开的参数。结果应为要读取
和在启动是要执行的一个文件的完整路径名称。这是一个XSI必须的变量。
HOME 根(登录)目录
IFS 内部的字段分隔器;例如,作为单词分隔器的字符列表。一般设为空格 制表符
以及换行符
LANG 当前locale的默认名称;其他的LC_*变量会覆盖其值
LC_ALL 当前locale的名称;会覆盖LANG与其他LC_*变量
LC_COLLATE 用来排序字符的当前locale名称
LC_CTYPE 在模式匹配期间,用来确定字符类别的当前locale的名称
LC_MESSAGES 输入信息的当前语言的名称
LINENO 刚执行过的行在脚本或函数内的行编号
NLSPATH 在$LC_MESSAGES(XSI)所给定的信息语言里,信息目录的位置。
PATH 命令的查找路径
PPID 父进程的进程编号
PS1 主要的命令提示字符串。默认为"$"
PS2 行继续的提示字符串。默认为">"
PS4 以set -x设置的执行跟踪的提示字符串。默认为"+"
PWD 当前的工作目录
算数运算符
运算符 意义 顺序
++ -- 增加及减少,可前置也可以放在结尾 由左至右
+ - ! ~ 一元的正好与负号;逻辑 由右至左
与位的去反
* / % 乘法 除法 与余数 由左至右
+ - 加法减法 由左至右
<< >> 向左位移 向右位移 由左至右
< <= > >= 比较 由左至右
== !== 相等与不想等 由左至右
& 位的AND 由左至右
^ 位的Exclusive OR 由左至右
| 位的OR 由左至右
&& 逻辑的AND 由左至右
|| 逻辑的OR 由左至右
?: 条件表达式 由右至左
= += -= *= /= %= &= ^= <<= >>= |= 赋值运算符 由右至左
POSIX的结束状态
值 意义
0 命令成功地退出
>0 在重定向或单词展开期间失败
1-125 命令不成功地退出。特定的退出值的含义,是由各个单独的命令定
义的。
126 命令找到了,但是文件无法执行。
127 命令里找不到。
>128 命令因收到信号而死亡。
test表达式
运算符 如果......则为真
string string不是NULL
-b file file是块设备文件
-c file file是字符设备文件
-d file file是目录
-e file file存在
-f file file为一般文件
-g file file有设置它的setgid位
-h file file是一符号连接
-L file file是一符号连接(等同于 -h)
-n string string是非null
-p file file是一命名的管道
-r file file是可读的
-S file file是socket
-s file file不是空的
-t n 文件描述符n指向一终端
-u file file有设置它的setuid位
-w file file是可写入的
-x file file是可执行的,或file是可被查找的目录
-z string string为null
s1 = s2 字符串1和字符串2是相等的
s1 != s2 字符串1与字符串2是不想等的
n1 -eq n2 整数n1等于n2
n1 -ne n2 整数n1不等于n2
n1 -lt n2 n1小于n2
n1 -gt n2 n1大于n2
n1 -le n2 n1小于等于n2
n1 -ge n2 n1大于等于n2
POSIX的test算法
参数 参数值 结果
0 退出状态为伪(1)
1 如果$1非null 退出状态为真(0)
如果$1为null 退出状态为伪(1)
2 如果$1为! 否定单一参数测试结果,$2
如果$1为一元运算符 运算符的测试结果
其他情况 未定义
3 如果$2为二元运算符 运算符的测试结果
如果$1为! 否定双参数测试结果,$2 $3
如果$1是(且$3是) 单一参数测试的结果.$2(XSI)
其他情况 未定义
4 如果$1为! 否定三个参数测试的结果,$2 $3 $4
如果$1是(且$4是) 两参数测试的结果,$2 $3(XSI)
其他情况 未定义
>4 未定义
脚本添加用户
echo "password" | passwd --stdin $username &> /dev/null
三种常用格式发信
mail -s test test@163.com #第一种方法,你可以把当前shell当成编辑器来用,编辑完内容后Ctrl-D结束
echo “mail content”|mail -s test test@163.com#第二种方法,我用的最多,可能是喜欢管道的缘故吧
mail -s test test@163.com < file #第三种方法,以file的内容为邮件内容发信
转载于:https://blog.51cto.com/ifenx/1361546