[英]ksh script + print argument content in shell script
我想使用一個參數運行script.sh
。
如果第一個參數= action,那么script.sh
將打印action參數- restart machine each 1 min
我的示例無法正常工作,但是請提出腳本中需要解決的問題,以便在參數為action
打印$action
參數。
備注我不想設置以下解決方案- [[ $1 = action ]] && echo action "restart machine each 1 min
我的示例腳本:
#!/bin/ksh
action="restart machine each 1 min"
echo "action" ${$1}
示例如何運行腳本
./script.sh action
我需要獲得的預期結果:
action restart machine each 1 min
已經兩年了,但是這里有一個使用nameref
(aka nameref
typeset -N
)的例子。 它包括三個連續的測試以驗證給定參數的有效性。
nameref
進行檢查。 action='This is the value of $action'
word='This it the value of ${word}'
list='This is a list'
lie='This is a lie'
(
typeset name=${1:?Usage: script.sh varname} || exit
nameref arg1=${name} || exit
: ${arg1:?} || exit
echo "$name $arg1"
)
您要使用eval:
action="restart machine each 1 min" eval echo $1 \$$1
請注意,這樣做會帶來巨大的安全風險。 考慮如果用戶使用第一個參數“; rm -rf /”調用腳本會發生什么情況
您可以通過以下方法緩解此類問題:
eval "echo '$1' \"\$$1\""
但是實際上,您只是在自找麻煩(如果第一個參數包含雙引號,而$()構造將允許執行任意命令,則該最后一個版本將很困難)。 僅使用case語句並檢查參數是否與您要查找的字符串完全匹配要安全得多。 或者,至少檢查您要評估的參數是否不包含以下任何字符: ;()$"'
。最安全的方法是檢查其僅包含字母數字( a-zA-Z0-9
)
使用pdksh
可以正常工作:
echo "action" `eval echo '$'$1`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.