Linux中的Shell编程,是众多学习操作Linux必不可少的。这里简单分享一下一点感想。Shell程序的语法比较特殊,变量的引用,运算符的使用,条件控制语句都和熟悉的C,Python有的区别。简单谈谈一些容易犯错和忽略的地方。
一、运算符
Shell中的运输符有三种方式。1、$((运算式)),即是用$加两个小括号。(为什么要两个小括号,我也不懂),例:$(((2+3)*5))。2、$[运算式],这种稍微能理解点,$ 加一个[],例:$[(2+3)*5]。3、expr m+n 语句,这要求运算符之间要有空格。例:TEMP= `expr 2 + 3`,且在赋予变量时使用反引号(反引号就是键盘数字1前面那个键)
二、条件控制语句 if [ ]
条件控制语句可以对:1、字符串的比较,数值的比较。= 字符串比较,-lt 小于,-le 小于等于,-eq 等于,-gt 大于,-ge 大于等于,-ne 不等于。例:if [ "ok"="ok] ,if [ 34 -le 36 ].
2、按文件权限来判断,if [ -r /home/aa.txt ] 是判断aa.txt是否有读的权限,有-r,-w,-x 三种。
3、按文件类型来判断,-f 文件存在,且是一个常规文件,-e 文件存在,-d 文件存在且是一个目录。例:if [ -e /root/aaa.txt ] 表示判断是否有aaa.txt这个文件。
特别注意:条件控制语句中的 [ ] 中括号必须两边有空格,这是最容易忽视的地方。
三、Shell的变量
Shell变量分为系统变量和自定义变量。
1、系统变量有$HOME $PWD $USER等。查看系统变量有 set 命令。
2、一般定义变量用大写英文,且在引用是加$符号,且等号两侧不能有空格。例:A=100,echo $A。表示100赋予A这个变量,输出或引用时加上$符。撤销变量用unset A。
3、静态变量用readonly声明,例:readonly B=2 。静态变量时不能撤销的。
4、环境变量,可以在其他Shell中使用。但是必须要使用export关键字。例:在etc/profile 文件中配置:最后行加入:
TOMCAT_HOME=/opt/tomcat
exprot TOMCAT_HOME
#source /etc/protile
5、位置参数变量,得到命令行输入的信息。$n n=0表示命令本身,1-9表示第1-9个参数,10个以上使用${10}。$*表示命令行中所有参数,整体对待。$@表示命令行所有参数,把每个参数区分对待。$#代表命令行中所有参数个数。
6、预定义变量,Shell设计者预先定义的变量。$$ 当前进程的进程号(PID)。$! 后台运行的最后一个进程号。$? 返回最后一次命令执行的状态,0表示执行成功,非0表示不成功,具体数字由命令自己决定。
上图表示位置参数变量。
上图表示自定义变量,命令行的内容赋予自定义变量,环境变量的定义。
上图是综合应用:输入两个数,求中间的质数。其中有read获取外部输入,if条件判断,for循环语句,运算符的比较。
提示:Shell语法和其他编程语言有些不同,注意区分。Shell编程中很多是对系统文件的操作,逻辑性不强,直接把命令行写进Shell脚本即可。