我想要用戶在命令行輸入東西-l或-e。 例如, 。$/report.sh -e 我想if語句分裂他們做出任何決定,所以我已經試過......如何比較shell中的2個字符串?
if [$1=="-e"]; echo "-e"; else; echo "-l"; fi
顯然是行不通的,雖然 感謝
我想要用戶在命令行輸入東西-l或-e。 例如, 。$/report.sh -e 我想if語句分裂他們做出任何決定,所以我已經試過......如何比較shell中的2個字符串?
if [$1=="-e"]; echo "-e"; else; echo "-l"; fi
顯然是行不通的,雖然 感謝
我使用:
if [[ "$1" == "-e" ]]; then
echo "-e"
else
echo "-l";
fi
然而,分析論證,getopts
可能使您的生活更輕鬆:
while getopts "el" OPTION
do
case $OPTION in
e)
echo "-e"
;;
l)
echo "-l"
;;
esac
done
如果你想這一切在同一行(通常它使得它很難讀):
if [ "$1" = "-e" ]; then echo "-e"; else echo "-l"; fi
你需要方括號,發生的事情裏面他們之間的空格。此外,只需使用一個=
。您還需要一個then
。
if [ $1 = "-e" ]
then
echo "-e"
else
echo "-l"
fi
具體到-e
的問題但是是它在echo
特殊的意義,所以你不可能得到任何東西。如果您嘗試echo -e
,則不會顯示任何內容,而echo -d
和echo -f
可以完成您所期望的操作。在它旁邊放一個空格,或者用括號括起來,或者用其他方法將它發送到echo
時不完全是-e
。
如果您只想打印用戶提交的參數,則可以簡單地使用echo "$1"
。如果用戶還沒有提交任何內容,如果要恢復爲默認值,則可以使用echo "${1:--l}
(默認值爲:-
是Bash語法)。然而,如果你想真正強大和靈活的參數處理,你可以看看getopt
:
params=$(getopt --options f:v --longoptions foo:,verbose --name "my_script.sh" -- "[email protected]")
if [ $? -ne 0 ]
then
echo "getopt failed"
exit 1
fi
eval set -- "$params"
while true
do
case $1 in
-f|--foo)
foobar="$2"
shift 2
;;
-v|--verbose)
verbose='--verbose'
shift
;;
--)
while [ -n "$3" ]
do
targets[${#targets[*]}]="$2"
shift
done
source_dir=$(readlink -fn -- "$2")
shift 2
break
;;
*)
echo "Unhandled parameter $1"
exit 1
;;
esac
done
if [ $# -ne 0 ]
then
error "Extraneous parameters." "$help_info" $EX_USAGE
fi
你說「getopt」和「getopts」。他們是兩回事。前者是一個獨立的可執行文件,後者是內置的shell。 – 2010-05-23 02:05:02
D'oh - 固定。謝謝。 – 2010-05-23 03:10:12