我无法让以下命令选项 -s 和 -f 显示我需要的内容。参数识别得很好。
#!/bin/bash
defaultPath="/etc/passwd"
defaultShell="/bin/bash"
h_on=0
f_on=0
s_on=0
set -- $(getopt f:hs: "$@")
while [ -n "$1" ]
do
case "$1" in
-f) f_on=1 ;;
-h) h_on=1 ;;
-s) s_on=1 ;;
--) shift
break ;;
esac
shift
done
if [ $h_on -eq 1 ]
then
echo
echo "Usage: shellsearch [OPTION...]"
echo
echo "-f FILE Search in FILE. FILE must be formatted"
echo " like /etc/passwd."
echo " Defaults to /etc/passwd if not provided
echo
echo "-h Display usage information."
echo
echo "-s SHELL Display users with SHELL shell."
echo " SHELL must be in /etc/shells."
echo " Defaults to /bin/bash if not provided."
exit 0
fi
if [ $f_on -eq 1 ]
then
echo "is $file readable?" '
fi
if [ $s_on -eq 1 ]
then
echo "is $shell a shell?"
fi
我想要的输出如下:
Input file: $file
Displaying users with shell $shell.
如果有人能提供帮助/建议我将不胜感激。
答案1
使用getopts
以下示例如这。
while getopts "f:hs:" opt
do
case "${opt}" in
f) f_on=1 ; file=${OPTARG};;
h) h_on=1 ;;
s) s_on=1 ; shell=${OPTARG};;
esac
done
此外,请注意此行中的引文
echo " Defaults to /etc/passwd if not provided"
在那一行
echo "is $file readable?"