----------Bash Shell 学习记录3----------
echo -n (行末不换行)
变量赋值无空格
反引号,A=`XXX`,将XXX执行的输出结果赋给A
数据定向(A->B)
命令A > 数据B
命令B < 数据A
命令A | 命令B
$[ operation ] 可用于数值计算(但仅支持整数)
浮点运算:
1. R=`echo "scale=n;operation"|bc`(最外面是反引号,n代表小数位数,bc用于计算)
2. R=`bc <<EOF
options(scale=n)
statments(var1=?,var2=?)
expressions(var3=var1?var2)
EOF
`(反引号包裹的内联重定向,EOF作为文本标记符)
$?查看上个命令的退出状态码,而这正是if语句判断的依据
如果是0则继续允许then句段,否则elif或else或fi
test提供了比较判断功能
可使用
1. if test condition;then
commands
fi
2. if [ condition ] (注意方括号里面还有空格)
then
commands
fi
test数值比较(但注意浮点时的问题!!)
n1 -eq n2 (n1是否等于n2)
n1 -ge n2 (n1是否大于等于n2)
n1 -gt n2 (n1是否大于n2)
n1 -le n2 (n1是否小于等于n2)
n1 -lt n2 (n1是否小于n2)
n1 -ne n2 (n1是否不等于n2)
test字符串比较(@真是反人类的设计啊@)
str1 = str2 (str1是否相同于str2)
str1 != str2 (str1是否不同于str2)
str1 \< str2 (str1是否小于str2)注意得用\转义
str1 \> str2 (str1是否大于str2)注意得用\转义
-n str1 (str1是否长度非0)(主要用于防止变量空值导致的灾难,预判后再用)
-z str1 (str1是否长度为0)
另外注意test大小比较为标准ASCII顺序,但sort命令并不是!
test文件比较
-d file (是否存在且为目录)
-e file (是否存在)
-f file (是否存在且为文件)
-r file (是否存在且可读)
-s file (是否存在且非空)(删除前检查)
-w file (是否存在且可写)
-x file (是否存在且可执行)
-O file (是否存在且属于当前用户)
-G file (是否存在且为默认组及当前用户所有)
file1 -nt file2 (file1是否比file2新)
file1 -ot file2 (file1是否比file2旧)
最后,test1,test2之间可以用&&,||布尔运算连接
另外还有(())和[[]],有空再说吧。
bash有case语句用于多次判断
IFS用于设定字段分隔符
$0是脚本的完整路径,如果单独返回程序名可使用basename
$*多参数合一
$@多参数归一
shift参数移动,尤其适用于未知参数个数时,但小心参数值移除后无法恢复。
exec 1>testout 用于大量数据需要重定向时
推荐阅读链接:
http://community.linuxmint.com/tutorial/view/244