shell编程小结
Posted LarryZeal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程小结相关的知识,希望对你有一定的参考价值。
因为项目中要用到shell脚本,所以系统的看了一下。以前只是泛泛的了解。
变量:环境变量、预定义变量、位置变量、自定义变量。
环境变量这个好说,通过set或者env命令都能看到相应的列表,然后可以通过 echo ${VAR}显示出来。需要提一下,windows下也有环境变量,也可以使用echo %{VAR}%显示出来。
如:
[[email protected]]# env TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/0 USER=root MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PWD=/root JAVA_HOME=/opt/java LANG=en_US.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root [[email protected]]# echo $USER root [[email protected]]#
预定义变量,顾名思义,就是定义好的一些变量,如”$”/”?”/”!”。
作用分别是:代表当前pid、代表上一次执行的结果(returned num)、代表上一个后台进程pid!
如:
[[email protected] ~]# echo $$ 2118 [[email protected] ~]# echo $? 0 [[email protected] ~]# echo $! [[email protected] ~]#
位置变量,其实是预定义变量的一种,$0~$9,以及${N}。代表了执行脚本时的参数。
如:假设我们有一个demo.sh脚本,当你执行 ./demo.sh p1 p2 p3 ..的时候,$0就是 ./demo.sh,$1就是p1,依次依此类推。
但还有三个预定义变量,分别是 “*”/”@”/”#”,分别代表了所有参数(作为整体)、所有参数(作为数组)、参数个数!
我们给定如下脚本 demo.sh:
#! /bin/bash # 就示意前两个 echo "执行的命令是:$0" echo "第一个参数是:$1" echo "参数的个数是:$#" # 这两个看起来一样,但用在for里面就能看出来了 echo "所有参数是:$*" echo "所有参数是:[email protected]" # 注意,要用双引号,否则就成了 for i in p1 p2 p3,和[email protected]没区别了。。 for i in "$*" do echo $i done echo "---" for i in "[email protected]" do echo $i done
[[email protected]]# ./demo.sh 11 22 33 44 55 执行的命令是:./demo.sh 第一个参数是:11 参数的个数是:5 所有参数是:11 22 33 44 55 所有参数是:11 22 33 44 55 11 22 33 44 55 --- 11 22 33 44 55 [[email protected]]#
自定义变量就不说了,同Java没啥区别。
运算
除了变量,接下来就是运算了,也就是表达式。
不过,别扭的是,shell一切皆字符串,这点太难受了
如:
[[email protected] ~]# x=3 [[email protected] ~]# y=4 [[email protected] ~]# z=$x+$y [[email protected] ~]# echo $z 3+4 #这里是拼接了字符串,即没有数值类型 [[email protected] ~]# [[email protected] ~]# z=$(($x+$y)) 7 #$(()) 这样才是计算,还有declare -i z=$x+$y或者 z=$( expr $x + $y ) 但都不如$(())方便! [[email protected] ~]#
建议使用 “$(( 计算表达式 ))”这种方式,因为其他两种都不方便!
不过要提一下declare!
declare –i 是视为整数(注意,不是浮点数)
declare –x 是导出为环境变量 (export就是这个的变体)
declare –p 是打印出变量的定义
declare –r 是设为只读(不能取消的那种。。。)
更别扭的是,如果你想取消设置,那需要把上面的减号”-“变成加号”+” -- 但是对只读无效。。。
上面是数值运算,接下来就是逻辑运算,也就是我们说的判断真假。
shell的判断有点像JSP中的EL表达式,其定义的运算符可以执行相应的运算,如-ge/-gt/-le/-lt/-eq/-ne/!/-z/-n/-d/-f/-e等等。
其实都是英文单词的首字母,很好理解也很好记 -- 除了 -z和-n,前者是为空判断,后者是非空判断,当成zero和not吧,太别扭了!
逻辑运算也有两种格式:
test –e “/root” # 判断文件是否存在
[ 11 –gt 22 ] # 判断 11 是否 大于 22
如何查看结果?可以通过 “echo $?”来查看!
但是,还有更简单的,就是使用 && 和 ||,如下:
test –e “/root”&& echo yes || echo no
[ 11 –gt 22 ] && echo yes || echo no
相等的判断,既可以用 ==,也可以用 -eq,不过后者仅能用于整数!
需要说明的是,单个等号=,也可以用于判断相等,但容易引起误解,所以务必不要使用!
运算之后,就该是逻辑控制了,我们都知道逻辑控制的三大语句if/for/while,唔,还没看到while,不过应该都有,就是别扭些。
太晚了,明早超级boss来视察,先睡了
以上是关于shell编程小结的主要内容,如果未能解决你的问题,请参考以下文章