标签:
shell诞生于unix,是unix/linux交互的工具,单独地学习shell是没有意义的。
shell需要依赖其它程序才能完成大部分工作,这或许是他的缺陷,但是它不容置疑的长处是:简洁的脚本语言标记方式而且比C语言编写的程序执行更快、更有效率。
shell本身是一个用C语言编写的程序,它是用户使用unix/linux的桥梁,用户的大部分工作都是通过shell完成的,shell既是一种命令语言,又是一种程序设计语言。
shell有两种执行命令的方式:
交互式:解释执行用户的命令,用户输入一条命令,shell就解释执行一条。
批处理:用户事先写一个shell脚本,其中有很多条命令,让shell一次把这些命令执行完,而不必一条一条地敲命令。
shell的种类很多:bash、sh、ash、csh、ksh等,bash是linux标准的shell,bash完全兼容sh。
运行shell脚本有两种方式:
作为可执行程序 ./test.sh
作为参数解释器 /bin/sh test.sh
shell支持自定义变量
定义变量
定义变量时,变量名不加美元符号($):
var iablename="value"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
变量名的命名遵循如下规则:
使用变量
使用一个定义过的变量,只要在变量名前面加上美元符号($)即可
your_name="mazhiyuan" echo $your_name echo ${your_name}
推荐使用给所有变量加上花括号;这是一个好的变成习惯。
已经定义的变量可以被重新定义。
只读变量
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被修改。
删除变量
使用unset命令可以删除变量,变量被删除后不能再次使用;unset命令不能删除只读变量。
变量类型
运行shell时,会同时存在三种变量:
局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其它shell启动的程序不能访问局部变量。
环境变量
所有的程序包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shell脚本可以定义环境变量。
shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
变量名只能包含字母、数字、下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。
变量 |
含义 |
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数,n是一个数字,表示第几个参数 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数,被双引号(“”)包含时,与$*稍有不同 |
$? | 上个命令的退出状态或函数的返回值 |
$$ | 当前shell进程ID,对于shell脚本,就是这些脚本所在的进程ID |
说明:
"$*"会将所有的参数作为一个整体,以"$1 $2....$n"的形式输出所有参数
"$@"会将各个参数分开,以“"$1" "$2"...."$n"”的形式输出所有参数
转义字符 | 含义 |
---|---|
\\ | 反斜杠 |
\a | 警报,响铃 |
\b | 退格(删除键) |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符(tab键) |
\v | 垂直制表符 |
说明:
-e 对转义字符进行替换
-E 禁止转义,默认也是不转义
-n 禁止插入换行符
命令替换是指shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。
`command`
注意是反引号
变量替换是指根据变量的状态(是否为空、是否定义等)来改变它的值。
可以使用的变量替换形式:
形式 | 说明 |
---|---|
${var} | 变量本来的值 |
${var:-word} | 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。 |
${var:=word} | 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。 |
${var:?message} |
如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。 若此替换出现在Shell脚本中,那么脚本将停止运行。 |
${var:+word} | 如果变量 var 被定义,那么返回 word,但不改变 var 的值。 |
标签:
原文地址:http://www.cnblogs.com/stlong/p/5060283.html