好像你想獲得X和從第一和第二個參數($1
和$2
)Y和讀操作(A,S,d,男)從標準輸入。 我修改您的代碼一點,以克服原劇本的問題,並根據我的假設提供結果:
#!/bin/bash
# First number.
x=$1
# Second number.
y=$2
# Result of either addition, subtraction, division or multiplication of $x and $y.
result=0
# Reads operation from user.
read -ep "Enter a for add, s for subtract, m for multiply or d for divide: " operation
case $operation in
a) result=$((x + y));;
s) result=$((x - y));;
d) result=$((x/y));;
m) result=$((x * y));;
*) printf '%s: %s\n' "$operation" "Unknown operation" >&2; exit 1;;
esac
printf 'result: %s\n' "$result"
用法示例:(腳本名稱爲sof.sh)
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: a
result: 9
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: m
result: 20
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: s
result: 1
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: d
result: 1
PS
請注意以下事項:
expr
在古代是shell代碼用來做數學的程序。在像bash這樣的POSIX shell中,使用$((expression))
。在bash,ksh88 +,mksh/pdksh或zsh中,您還可以使用((expression))
或'let 表達式'。
- 儘管沒有在腳本中使用originaly,但在Bash編程時,值得知道的是
[[
是一個類似於(但功能比[
命令更強大)的bash關鍵字。看到這個Bash FAQ和Test and conditionals。 除非你正在爲POSIX sh寫作,否則建議使用[[
。 「
」沒有機會輸入「。不清楚你的意思,你認爲你的腳本可以被稱爲'myscript a 3 4'嗎?這是你的輸入,否則你必須添加'read x?'在腳本中輸入x值「'等等。另外'elif'會更適合你的二次測試。更好的辦法是使用'case $ op a)add ... ;;; ....; esac'等。更好地澄清你的Q文本,而不是迴應評論。祝你好運。 – shellter
謝謝。我從添加輸入的兩種方法中改變了一半,並弄糊塗了。 – Bradg89