getopts:用于描述相关信息。
选项: OPTARG 、 OPTIND
bash脚本综合实验:
1、如何利用脚本,在创建脚本时,自动把相关选项添加到新的脚本中,且自动在保存
脚本后检测是否有语法错误,选择是否继续编辑还是退出等操作且描述信息可以自己定义。
vim mkscript.sh
#!/bin/bash
# Name: mkscript 脚本名称
# Description: Create script 脚本描述
# Author: A dong 作者
# Version:0.0.1 版本号
# Datatime: 04/06/17 14:50:00
# Usage:mkscript FILENAME
while getopts ":d:" OPT; do
case $OPT in
d)
DESC=$OPTARG ;;
\?)
echo "Usage: mkscript [ -d DESCRIPTION ] FILENAME" ;;
esac
done
shift $[OPTIND-1]
if ! grep "[^[:space:]]" $1 &> /dev/null ; then
cat > $1 << EOF
#!/bin/bash
# Name: `basename $1`
# Description: $DESC
# Author: A dong
# Version:0.0.1
# Datatime: `date "+%F %T"`
# Usage:`basename $1`
EOF
fi
vim + $1
until bash -n $1 &> /dev/null ;do
read -p "Syntax error,q|Q for quiting,others for editing: " CHOESE
case $CHOESE in
q|Q)
echo "Quiting..."
exit 8
;;
*)
vim + $1
;;
esac
done
chmod +x $1
脚本执行结果如下:自动生成相关的描述信息
[root@john script]# bash mkscript.sh -d "opt test" optest.sh
#!/bin/bash
# Name: optest.sh
# Description: opt test
# Author: A dong
# Version:0.0.1
# Datatime: 2017-04-07 09:42:59
# Usage:optest.sh
2.写一个脚本getinterface.sh,脚本可以接受选项(i,I,a),完成以下任务:
(1)使用以下形式:getinterface.sh [-i interface|-I IP|-a]
(2)当用户使用-i选项时,显示其指定网卡的IP地址;
(3)当用户使用-I选项时,显示其后面的IP地址所属的网络接口;
(4)当用户单独使用-a选项时,显示所有网络接口及其IP地址(lo除外);
vim showip.sh
#!/bin/bash
# Name: getopts.sh
# Description: getopts OPTIND
# Author: A dong
# Version:0.0.1
# Datatime: 2017-04-07 15:00:38
# Usage:getopts.sh
SHOWIP () {
if ! ifconfig |grep -o "^[^[:space:]]\{1,\}"|grep $1 &>/dev/null ;then
return 13
fi
echo -n "$1: "
ifconfig $1 |grep -o "inet addr:[0-9\.]\{1,\}"|cut -d: -f2
}
SHOWETHER () {
if ! ifconfig |grep -o "[0-9\.]\{1,\}"|cut -d: -f2 |grep $1 &> /dev/null ;then
return 14
fi
echo -n "$1: "
ifconfig |grep -B 1 "$1"|grep -o "^[^[:space:]]\{1,\}"
}
USAGE () {
echo "getopts.sh <-i interface|-I IP|-a ALL>"
}
while getopts ":i:I:a:" SWITCH; do
case $SWITCH in
i)
SHOWIP $OPTARG
[ $? -eq 13 ] && echo "Wrong ethercard."
;;
I)
SHOWETHER $OPTARG
[ $? -eq 14 ] && echo "Wrong IP."
;;
a)
ifconfig | grep -A 1 "^[^[:space:]]\{1,\}"|grep -A 1 "eth[[:alnum:]]"
;;
*)
USAGE ;;
esac
done
本文转自wang650108151CTO博客,原文链接: http://blog.51cto.com/woyaoxuelinux/1914034,如需转载请自行联系原作者