高级bash编程指南(一)
时间:2011-03-14 来源:xdzone
1.cat /dev/null > messages 清空messages文件的内容。注意方向性。
2.shell的执行
(1)将scriptfile放到/usr/local/bin中,这样系统中的所有用户都可以使用了只要输入scriptfile即可。
(2)sh scriptfile 运行bash脚本将会禁止所有bash的扩展特性。
3.命令分割符【分号】,允许同一行里有多个命令。
4.case语句天生具有break的特性。
5.【点号】命令作为一个文件名的前缀时,使该文件具有了隐藏属性。除非用ls 加-a选项,不能显示。
6.【双引号】里面的特殊字符能够被解释,【单引号】是更强的引用,不允许解释变量和其他特殊的字符。
7.【逗号】表达式类似于C语言中的逗号表达式。用于连接一连串的数学表达式,每一个表达式都被求值,但只有最后一个被返回。
8.【`】(backquotes)命令替换 `command`可以将command的执行结果赋值给一个变量
9.【冒号】空命令。
(1)空操作退出码是真(0),它一般被认为和shell的内建命令true一样,它时Bash自身内建的。
(2)在必须要有两元操作的地方作为一个分割符和占位符。
if condition
then : #这里其实不做什么,也不能为空,否则语法错误。
else
take-some-action
fi
: ${var='whoami'},注意:后面的空格。不加冒号,语法错误。
(3)和重定向操作符(>)连用,把一个文件长度截断为0,文件权限不变。如果文件不存在,则会创建一个新文件。
: > file相当与cat /dev/null > file 或者 echo > file
和田间重定向操作符(>>)连用file存在没影响,不存在则创建它。
:这只能应用在普通文件中,不能用在管道,符号链接和其他特殊文件。
10.(1)$?保存了一个命令,一个函数,或者一个脚本的退出状态码的值.
(2)$$保存了脚本运行时的进程ID值。
11.圆括号【()】里面的命令是在新的一个子shell中执行的。
代码块【花括号】是匿名的函数,与函数不同的是,在代码块里面的变量仍然能在脚本后面的代码访问。
12.redirection重定向
(1) command>&2 把命令command的标准脚本(stdout)重定向到标准错误(stderr)。command >2 会将command命令的输出写到文件2中。&2代表stderr。
(2)command &>filename 把command的stdout和stderr重定向到stderr。
13.
管道是通过子进程实现的
variable="initial_value"
echo "new_value" | read variable
echo "variable = $variable" #initial_value
14.
a=`ls -l`
echo $a #此时会省去空白符,所以下面的两个表达式是有区别的
echo "$a"
15.
不同与许多其他的编程语言,Bash不以“类型”来区分变量。本质上bash变量是字符串,但是根据环境的不同,bash允许变量有整数计算和比较。其中的决定因素时变量的值是不是只含有数字。
(1)declare - a #生命a是整数
16.对于位置参数$9之后的参数必须用括号括起来。
17.输出引号 echo "The name of this script is \"$0\". "
18.脚本的最后一个参数
(1)lastarg=${!#}
(2)args=$#
lastarg=${!#}
19.basename filepath [suffix] :strip directory and suffix from filenames
20. 。。。。。。