例如我想创建一个脚本,可以让别人引用,例如:
1 |
|
1 | # vim +8 $1 |
vim + $1
#cp /etc/fstab . && ./mkscript fstab
如果我在编辑的时候有语法错误,没检测出来,当我保存退出的时候,希望可以帮我检测出来并提示:
#!/bin/bash
#Name:mkscript
#Description:Create script
#Author:unravel
#Version:0.0.1
#Datatime:05112015
#Usage: mkscript FILENAME
if ! grep “[^[:space:]]” $1 &>/dev/null;then
cat >$1<< EOF
#!/bin/bash
#Name:basename $1
#Description:
#Author:unravel
#Version:0.0.1
#Datatime:date +%F-%H-%M-%S
#Usage:
EOF
fi
vim + $1
until bash -n $1 &>/dev/null;do
read -p “syntax error,q|Q quiting,others for editing:” OPT
case $OPT in
q|Q)
echo “quit”
exit 8
;;
*)
vim + $1
;;
esac
done
chmod +x $1
#./mkscript test.sh
可以专门把这个放到/bin目录下,当作命令来用:
#cp /tmp/mkscript /bin
getopts:这个命令可以获取脚本的选项
getopts : getopts optstring name
例如:
#vim opt.sh
getopts “abcd” OPT
echo $OPT 可以实现选项
#chmod +x opt.sh
#./opt.sh -a
a
#./opt.sh -b
b
但:
#./opt.sh -a -b
a
#vim opt.sh
getopts “bd:” OPT
echo $OPT
echo $OPTARG (这个默认就有这个变量)
#./opt.sh -d “haha”
d
haha (所以这个:表示可以后接参数)
但是:
#./opt.sh -b “haha”
只会输出b,只接受最后一个参数。
所以,任何一个参数想带上参数,就在哪个参数后面加: , 例如:
getopts “b:d:” OPT
echo $OPT
echo $OPTARG
#./opt.sh -b “bb”
b
bb
如果输入./opt.sh -e 就会报错,非法字符,就会感觉不友好:
getopts “:b:d:” OPT (在最前面添加:即可)
echo $OPT
echo $OPTARG
接受多个参数:
USAGE() {
echo “Usage:opt.sh [-b argu] [-b argu]”
}
while getopts “:b:d:” SWITCH;do
case $SWITCH in
b)echo “The option is b”
echo $OPTARG
;;
d)echo “The option is d”
echo $OPTARG
;;
*)USAGE;;
esac
done
#./opt.sh -b haha -d dada
The option is b
haha
The option is d
dada
最终脚本:
1 |
|
大概更新到这个地方