考慮使用更現代化的外殼:
#!/bin/bash
# Use an associative array, and map names to numbers
declare -A numbers
numbers=([Joe]=8881235555 [Bob]=8881235556)
echo "Who do you want to text?:(i.e. Joe, Bob, etc)"
read name
echo "What do you want to say?:)"
read quote
# Look up number by name
number=${numbers[$name]}
if [[ $number ]]
then
echo "texting $name ($number) with $quote"
mailx -s "Text Message via email" "[email protected]" <<< "$quote"
else
echo "Unknown user"
exit 1
fi
如果你想使用/ bin/sh的:
#!/bin/sh
# Prefix the numbers with something
number_Joe=8881235555
number_Bob=8881235556
echo "Who do you want to text?:(i.e. Joe, Bob, etc)"
read name
echo "What do you want to say?:)"
read quote
# Remove any dangerous characters that the user enters
sanitized=$(printf "%s" "$name" | tr -cd 'a-zA-Z')
# Look up by evaluating e.g. "number=$number_Joe"
eval "number=\$number_$sanitized"
if [ "$number" ]
then
echo "texting $name ($number) with $quote"
printf "%s\n" "$quote" | mailx -s "Text Message via email" "[email protected]"
else
echo "Unknown user"
exit 1
fi
在bash
,也可以使用間接變量'$ {@example名字!} .com「,但這是不可讀的,難以維護 –
@glennjackman,儘管如此,對於試圖支持bash 2.x或3.x(因爲關聯數組僅爲4.x)的用戶而言,這裏值得記錄。 –
Thi非常有幫助!現在,我將如何包含全部功能?是否可以從單獨的txt文件中提取數字,而不是在腳本中設置它們? – Bryan