我是shell脚本的新手.. 我尝试使用bash函数的一个脚本...但我不知道如何给出返回值..任何人帮助我..
#!/bin/bash
#Example of menu programs
function file_directory () {
while true;
do
echo "*******************"
echo "1.Date"
echo "2.List of users"
echo "3.Open a file"
echo "4.delete a file"
echo "5.Exit"
echo "Enter a choice[1-5] :"
read choice
case $choice in
1) echo "Today date is : `date`"
return 0;;
2) who
return 0 ;;
3) `touch file`
return 0;;
4) `rm -rf kk`
return 0;;
5) exit
return 0 ;;
*) echo "choice wrong. try again"
return 1 ;;
esac
done
}
## Main script starts here
file_directory
if [ "$?" -eq "0" ]; then
echo "success"
elif [ "$?" -eq "1" ]; then
echo "Something went wrong"
else
echo "failed"
fi
以上shell脚本我试过的.....帮帮我
答案 0 :(得分:0)
请注意,您不能多次使用$?
,因为它已设置为 last 命令的结果。此外,您将数字0与字符串“0”和运算符-eq(需要值,而不是字符串)进行比较,这是不对的。尝试:
retval=$?
if [ $retval -eq 0 ]; ...
答案 1 :(得分:0)
您的代码有几个多余的功能,可以防止它工作和/或不必要地使其复杂化。
因为case
语句中的每个代码路径都以return
语句结束,所以while true
循环实际上从不循环。拿走它,您也可以删除明确的return
语句,这实际上是一种改进,因为您将不再屏蔽您调用的程序中的任何错误状态。
此外,某些命令的进程替换是不正确的。要触摸文件,它是touch file
,而不是`touch file`
。后者实际上将从命令中检索输出(通常是一个空字符串),并尝试执行 作为命令,这肯定不是你想要的,并且是一个错误。
最后,很少需要显式检查返回代码$?
- shell的控制流语句已经隐式地执行了此操作。因此,而不是command; if [ $? = 0 ]; then something; fi
通常是if command; then something; fi
,甚至只是简写为command && something
。
总结一下,您的固定脚本可能看起来像这样。
#!/bin/bash
function file_directory () {
cat <<'____’
*******************
1.Date
2.List of users
3.Open a file
4.delete a file
5.Exit
Enter a choice[1-5]:
____
read choice
case $choice in
1) echo "Today date is : `date`" ;;
2) who ;;
3) touch file ;;
4) rm -rf kk ;;
5) exit ;;
*) echo "choice wrong. try again"
file_directory ;;
esac
}
if file_directory; then
echo "success"
else
echo "Something went wrong"
fi