今天学习了shell的if和function的用法,还是比较简单的。再次分享一下。
1. function
shell中的function 和c语言中的很像。
function setconfig() { read U if [ -z $U ] ; then echo "选择默认" U=$2 fi if [ -f $CONFIG_PATH/$1 ] ; then echo "覆盖原$1" rm $CONFIG_PATH/$1 > /dev/null 2>&1 fi echo $U > $CONFIG_PATH/$1 chown root.root $CONFIG_PATH/$1 chmod 600 $CONFIG_PATH/$1 }
其中$1,$2就代表着所传参数,不用声明直接使用即可。
2. if/test
if [ EXP ] 与 if test EXP 是一个意思
其中可以使用
-z 表示如果为空
-n 表示如果不为空
例子:
if [ -z $a ] ; then echo "$a是空的" fi
其他相关的还有
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
shell 参数提取:
USAGE="$0 -u chongzhi -p 123456 -e eth0 -s" while getopts :u:p:e:s OPTION ; do case "$OPTION" in u) user="$OPTARG" ;; p) pass="$OPTARG" ;; e) eth="$OPTARG" ;; s) sflag=1 ;; ?) echo "$USAGE" ; exit 1 ;; esac done