您的位置:首页 > 运维架构 > Shell

bash脚本应用

2014-03-20 19:21 169 查看
所有技巧都可以使用man bash获得:

搜索":-"
${parameter:-word}
使用(USE)默认值:

变量parameter的值如果未设置或为空,则使用word,但是word并不实际赋值给变量。

${parameter:=word}
赋予(Assign)默认值:

变量parameter的值如果未设置或为空,则将word实际赋予整个变量。

${parameter:?word}
显示错误信息:

变量parameter的值如果未设置或为空,则将会错误信息输出到标准输出。
${parameter:+word}
使用替换(Alternate)值:

当parameter的值实际为空时,则word不做任何替换。

当parameter的值实际不为空时,则word会替换原有值。

# DOC=""
# echo $DOC
空
# echo ${DOC:-caduke}
caduke
# echo $DOC
空

# echo ${DOC:=caduke}
caduke
# echo $DOC
caduke


搜索"##"或"%%"时:字符串截取命令
${parameter#word}
从左向右以"word"为分割符进行匹配,然后只去掉第一次被word匹配的左侧内容,包含word

${parameter##*word}
用于截取命令的基名:相当于basename /path/to/cmd

从左向右以word为分隔符进行匹配,这里加上"*",表示去掉全部被word匹配的左侧内容,

${parameter%word*}
用于截取命令的目录路径:相当于dirname /path/to/cmd

从右向左以"word"为分隔符进行匹配,然后只去掉第一次被word匹配的右侧内容,包含word

${parameter%%word*}
从右向左以"word"为分隔符进行匹配,然后去掉全部被word匹配的右侧内容,包含word

# which named
/usr/sbin/named
# CMD=/usr/sbin/named
# echo ${CMD##*/}
named
# basename $CMD
named

# echo ${CMD%/*}
/usr/sbin
# dirname $CMD
/usr/sbin


跳出while、until、for循环的中断:

continue:结束本轮循环提前进入下一轮,但是并不退出循环。

break :直接跳出循环

exit # :直接跳出脚本,并给与数字"#"的返回执行状态码

跳出函数:
return #:表示直接中止整个函数,并返回执行状态码,但默认并不显示

/etc/rc.d/init.d/functions中定义的函数:(可以直接引用)
daemon:用于启动一个服务,后面跟上"--pidfile"表示指定服务启动后的daemon创建的pid文件位置
用法:daemon - -pidfile /PATH/TO/PIDFILE /PATH/TO/SERVICE_NAME

passed、success、failure表示服务启动后的成功与否的提示

start() {
gendsskey
genrsakey
if [ -f $lockfile ]; then
echo -n "dropbear is already running."执行后不换行
failure直接显示带颜色的[ failed ]
echo   这里再换行
exit 7
fi
echo -n "Start dropbear"
daemon --pidfile $pidfile $dropbear -p $port
RETVAL=$?       启动dropbear服务并创建其pid文件
echo
if [ $RETVAL -eq 0 ];then
touch $lockfile创建锁文件
return 0
else
rm -f $lockfile $pidfile
return 1  跳出这个函数
fi
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息