shell编程笔记

今天学习了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
posted @ 1970-01-01 08:00  wangchao719  阅读(158)  评论(0编辑  收藏  举报