[英]Parameters in Linux shell script
我正在尝试在Linux中创建一个充当基本计算器的脚本文件。 它需要传递3个参数或不传递任何参数。
如果它具有3个参数,则应该能够像这样执行。
./mycalc 1 + 2
the sum of 1 plus 2 equals 3
但是,如果它没有任何参数,则应显示一个菜单,要求减,加或退出。
这种布局看起来如何? 我一直在尝试,但是每当我运行它时,都会出现错误,提示我需要输入参数,然后在出现错误后显示菜单。
op="$2"
if [ $op == "+" ]
then
sum=$(expr $1 + $3)
echo "The sum of $1 plus $3 equals $sum"
elif [ $op == "-" ]
then
diff=$(expr $1 - $3)
echo "The sum of $1 minus $3 equals $diff"
else
while [ $ch != "X" ] || [ $ch != "x" ]
do
read -p "C) Calculation
X) Exit" ch
命令行参数引用为$1, $2, $3...
(第一个arg为$ 1,第二个为$ 2 ...)
您可以使用以下命令测试参数是否不为null:
if [ -z "$1" ]
then
echo "No argument supplied"
fi
这是一个“可爱”的答案。 稍后,我将为您提供有关代码的反馈。
#!/bin/bash
case $2 in
+|-) :;;
*) echo "unknown operator: $2"; exit 1;;
esac
declare -A ops=(
["-"]=minus
["+"]=plus
)
printf "%d %s %d equals %d\n" "$1" "${ops["$2"]}" "$3" "$(bc <<< "$*")"
这是一个重写,希望展示一些有用的技术和良好实践
#!/bin/bash
user_args () {
case $2 in
+) echo "The sum of $1 plus $3 equals $(( $1 + $3 ))" ;;
-) echo "The sum of $1 minus $3 equals $(( $1 - $3 ))" ;;
*) echo "I don't know what to do with operator '$2'" ;;
esac
}
interactive () {
PS3="Select an operator: "
select choice in plus minus exit; do
case $choice in
plus) operator="+"; break ;;
minus) operator="-"; break ;;
exit) exit;;
esac
done
read -p "First value: " first
read -p "Second value: " second
echo "The sum of $first $choice $second equals $(( $first $operator $second ))"
}
if (( $# == 3 )); then
user_args "$@"
else
interactive
fi
"$@"
传递参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.