標籤:linux shell getopts()
1.建立一個指令碼,能為其他指令碼添加指令碼資訊:
#vim cs.sh
#!/bin/bash
cat > $1 <<EOF
#!/bin/bash
#Name: `basename $1`
#Description:
#Author:TEST
#Version:0.0.1
#Datatime:`date "+%F +%T"`
#Usage:`basename $1`
EOF
vim +8 $1
2.修改指令碼,若開啟的指令碼中有內容,則直接開啟,若為空白則添加資訊。
#vim cs.sh
#!/bin/bash
if ! grep “[^[::space]]” $1 &> /dev/null ; then
cat > $1 <<EOF
#!/bin/bash
#Name: `basename $1`
#Description:
#Author:TEST
#Version:0.0.1
#Datatime:`date "+%F +%T"`
#Usage:`basename $1`
EOF
vim +8 $1
fi
vim + $1
3.修改指令碼,添加文法測試功能。若有錯誤讓使用者選擇是否退出編輯。
#vim cs.sh
#!/bin/bash
if ! grep “[^[::space]]” $1 &> /dev/null ; then
cat > $1 <<EOF
#!/bin/bash
#Name: `basename $1`
#Description:
#Author:TEST
#Version:0.0.1
#Datatime:`date "+%F +%T"`
#Usage:`basename $1`
EOF
vim +8 $1
fi
vim + $1
until banshi -n $1 &> /dev/null ;do
read -p "Syntax error ,q|Q for quit,others for edit." OPT
case $1 in {
q|Q )
echo "quit"
exit 5
;;
*)
vim + $1
;;
}
esac
done
chmod +x $1
4.使用剛才的cs.sh建立指令碼,並為指令碼添加選項的功能。:
#./cs.sh opt.sh
#!/bin/bash
#Name: opt.sh
#Description:
#Author:TEST
#Version:0.0.1
#Datatime:xxxx-xxxx
#Usage:opt.sh
function USAGE() {
echo "Usage: opt.sh [-b|-d] args"
}
while getopts ":b:d:" SW ;do
case $SW in
b)
echo "the option is b"
echo $OPTARG
;;
d)
echo "the option is d"
echo $OPTARG
;;
\?)
echo "wrong options"
USAGE
;;
esac
done
#./opt.sh -b test1
#./opt.sh -d test2
#./opt.sh -c test3
5.修改 sc.sh,建立指令碼時使用選項讓使用者輸入description。
#vim cs.sh
#!/bin/bash
while getopts ":d:" SW;do
case $SW in
d)
DESC=$OPTARG
\?)
echo "Usage: sc.sh [-d DESCRIPTION] FILENAME"
esca
done
shift $[$OPTIND-1]
if ! grep “[^[::space]]” $1 &> /dev/null ; then
cat > $1 <<EOF
#!/bin/bash
#Name: `basename $1`
#Description:$DESC
#Author:TEST
#Version:0.0.1
#Datatime:`date "+%F +%T"`
#Usage:`basename $1`
EOF
vim +8 $1
fi
vim + $1
until banshi -n $1 &> /dev/null ;do
read -p "Syntax error ,q|Q for quit,others for edit." OPT
case $1 in {
q|Q )
echo "quit"
exit 5
;;
*)
vim + $1
;;
}
esac
done
chmod +x $1
6.編輯opt.sh,查看OPTIND的具體情況。
#vim opt.sh
#!/bin/bash
#Name: opt.sh
#Description:
#Author:TEST
#Version:0.0.1
#Datatime:xxxx-xxxx
#Usage:opt.sh
function USAGE() {
echo "Usage: opt.sh [-b|-d] args"
}
while getopts ":bd" SW ;do
case $SW in
b)
echo "the option is b"
echo $OPTARG
echo $OPTIND
;;
d)
echo "the option is d"
echo $OPTARG
echo $OPTIND
;;
\?)
echo "wrong options"
USAGE
;;
esac
done
#./opt.sh -b
2
#./opt.sh -b -d
2
3
7.寫一個指令碼ift.sh,可以接受選項 i I a ,要求如下:
usage如下: ift.sh [-i INTERFACE|-I IP| -a ]
-i 顯示指定網卡的ip地址,-I 顯示IP地址對應的介面,-a顯示出io介面外的所有介面和ip資訊。
#vim ift.sh
#!/bin/bash
SHOWIP() {
if ! ifconfig|grep -o "^[^[:space:]]\{1,\}" |grep $1 &> /dev/null; then
return 15
fi
echo -n "${1}: "
ifconfig $1 |grep -o "inet addr:[0-9\.]\{1,\}" |cut -d: -f2
echo
}
SHOWIF(){
if ! ifconfig |grep -o "inet addr:[0-9\.]\{1,\}" |cut -d: -f2|grep $1 &> /dev/null;then
return 16
fi
echo -n "${1}:"
ifconfig |grep -B 1 "$1" |grep -o "^[^[:space:]]\{1,\}"
echo
}
SHOWALL(){
暫時沒想出來 先空著!!稍後補齊
}
while getopts ":i:I:a:" SW ;do
case $SW in
i)
SHOWIP $OPTARG
if [$? -eq 15] && echo "wrong interface!"
;;
I)
SHOWIF $OPTARG
f [$? -eq 16] && echo "wrong ip!"
;;
a)
SHOWALL
;;
\?)
echo “Usage ift.sh [-i INTERFACE|-I IP| -a ]”
;;
esac
#getopts "[:]OPTION[:]..." [OPTARG]
內建參數:
OPTARG 參數
OPTIND 選項索引,指令碼中有多個選項時,最開始指向第二個選項,注意不是第一個!! 。使用shift後則指向第三個選項,以此類推。
OPTION 選項可以有多個,如果參數後邊有 OPTARG選項內建的參數,選項後如果後參數,則要在選項後邊加上冒號(:)。
若不想輸出錯誤資訊,則在所有選項最前頭加上冒號(:)。
注意,一次只能跟一個選項,不能跟多個。
本文出自 “小私的blog” 部落格,請務必保留此出處http://ggvylf.blog.51cto.com/784661/1668732
shell指令碼之指令碼接收選項