next up previous contents
Next: 實機練習題 Up: Shell 變數 Previous: 變數的變化與取代   Contents

變數的設定

  1. 變數設定方式
    變數設定方式 str 沒有設定 str 為空字串 str 已設定非為空字串
    var=${str-expr} var=expr var= var=$str
    var=${str:-expr} var=expr var=expr var=$str
    var=${str+expr} var= var=expr var=expr
    var=${str:+expr} var= var= var=expr
    var=${str=expr} str=expr str 不變 str 不變
    var=expr var= var=$str
    var=${str:=expr} str=expr str=expr str 不變
    var=expr var=expr var=$str
    var=${str?expr} expr 輸出至 stderr var= var=$str
    var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=$str
  2. 若 str 這個變數內容存在,則 var 設定為 str ,否則 var 設定為 "newvar"
    [root@linux ~]# unset str; var=${str:-newvar}
    [root@linux ~]# echo var="$var", str="$str"
    var=newvar, str=        %*<==因為 str 不存在,所以 var 為 newvar*)
    [root@linux ~]# str="oldvar"; var=${str-newvar}
    [root@linux ~]# echo var="$var", str="$str"
    var=oldvar, str=oldvar  %*<==因為 str 存在,所以 var 等於 str 的內容*)
    
  3. 若 str 不存在,則 var 與 str 均設定為 newvar,否則僅 var 為 newvar
    [root@linux ~]# unset str; var=${str=newvar}
    [root@linux ~]# echo var="$var", str="$str"
    var=newvar, str=newvar  %*<==因為 str 不存在,所以 var/str 均為 newvar*)
    [root@linux ~]# str="oldvar"; var=${str=newvar}
    [root@linux ~]# echo var="$var", str="$str"
    var=oldvar, str=oldvar  %*<==因為 str 存在,所以 var 等於 str 的內容*)
    
  4. 若 str 這個變數存在,則 var 等於 str ,否則輸出 "novar"
    [root@linux ~]# unset str; var=${str?novar}
    -bash: str: novar       %*<==因為 str 不存在,所以輸出錯誤訊息 *)
    [root@linux ~]# str="oldvar"; var=${str?novar}
    [root@linux ~]# echo var="$var", str="$str"
    var=oldvar, str=oldvar  %*<==因為 str 存在,所以 var 等於 str 的內容*)
    
  5. 上面這三個案例都沒有提到當 str 有設定,且為空字串的情況,請練習。
練習題
  1. 在 Bash shell 環境下,如何讓使用者由鍵盤輸入『A test』,並將其變成 atest 變數?
    Sol. 執行 read atest,接著輸入 A test,最後按 [Ctrl]+d 結束輸入。
  2. 在 Bash shell 環境下,如何提示『keyin』讓使用者由鍵盤輸入『A test』,並將其變成 atest 變數?
    Sol. 執行 read -p "keyin" atest,接著輸入 A test,最後按 [Ctrl]+d 結束輸入。
  3. 在 Bash shell 環境下,如何等待 30 秒內,讓使用者由鍵盤輸入『A test』,並將其變成 atest 變數?
    Sol. 執行 read -t 30 atest,接著輸入 A test,最後按 [Ctrl]+d 結束輸入。
  4. 在 Bash shell 環境下,執行 sum=10+30+5; echo $sum,結果為何?
    Sol. 10+30+5
  5. 在 Bash shell 環境下,執行 declare -i sum=10+30+5; echo $sum,結果為何?
    Sol. 45
  6. 在 Bash shell 環境下,如何以指令 declare 將變數 sum 變成環境變數?
    Sol. declare -x sum
  7. 在 Bash shell 環境下,如何以指令 declare 將變數 sum 變成唯讀屬性?
    Sol. declare -r sum
  8. 在 Bash shell 環境下,如何以指令 declare 將變數 sum 變成陣列?
    Sol. declare -a sum
  9. 在 Bash shell 環境下,如何將陣列變數 sum 的內容設定為 sum[0]=1, sum[1]=2 及 sum[2]=3,並列出?
    Sol. sum=(1 2 3); echo ${sum[0]} ${sum[1]} ${sum[2]}
  10. 在 Bash shell 環境下,如何將陣列變數 sum 的內容全部列出?
    Sol. echo ${sum[@]}
  11. 在 Bash shell 環境下,如何將陣列變數 sum 的元素個數列出?
    Sol. echo ${#sum[@]}
  12. 在 Bash shell 環境下,如何列出檔案系統及程序的所有限制?
    Sol. ulimit -a
  13. 在 Bash shell 環境下,如何限制單一使用者可以使用的最大程序(process)數量為 1024?
    Sol. ulimit -u 1024
  14. 在 Bash shell 環境下,如何限制使用者僅能建立 1MBytes 以下的容量的檔案?
    Sol. ulimit -f 1024
  15. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie##/*/},結果為何?
    Sol. testing.x.sh
  16. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie#/*/},結果為何?
    Sol. csie/testing/testing.x.sh
  17. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie##/*},結果為何?
    Sol. (空白,被刪光)
  18. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie#/*},結果為何?
    Sol. home/csie/testing/testing.x.sh
  19. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie%%/*/},結果為何?
    Sol. /home/csie/testing/testing.x.sh
  20. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie%%/*},結果為何?
    Sol. (空白,被刪光)
  21. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie%/*/},結果為何?
    Sol. /home/csie/testing/testing.x.sh
  22. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie%/*},結果為何?
    Sol. /home/csie/testing
  23. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie/testing/TEST},結果為何?
    Sol. /home/csie/TEST/testing.x.sh
  24. 在 Bash shell 環境下,若變數 csie="/home/csie/testing/testing.x.sh",則執行 echo ${csie//testing/TEST},結果為何?
    Sol. /home/csie/TEST/TEST.x.sh
  25. 在 Bash shell 環境下,如果變數 str 已設定或為空字串,則變數 var=$str;否則 var=new 字串,如何設定?
    Sol. var=${str-new}
  26. 在 Bash shell 環境下,如果變數 str 已設定為非空字串,則變數 var=$str;否則 var=new 字串,如何設定?
    Sol. var=${str:-new}
  27. 在 Bash shell 環境下,如果變數 str 已設定或為空字串,則變數 var=new 字串;否則 var= 空字串,如何設定?
    Sol. var=${str+new}
  28. 在 Bash shell 環境下,如果變數 str 已設定為非空字串,則變數 var=new 字串;否則 var= 空字串,如何設定?
    Sol. var=${str:+new}
  29. 在 Bash shell 環境下,執行 unset str; var=${str-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=
  30. 在 Bash shell 環境下,執行 str=""; var=${str-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  31. 在 Bash shell 環境下,執行 str="old"; var=${str-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old
  32. 在 Bash shell 環境下,執行 unset str; var=${str:-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=
  33. 在 Bash shell 環境下,執行 str=""; var=${str:-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=
  34. 在 Bash shell 環境下,執行 str="old"; var=${str:-new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old
  35. 在 Bash shell 環境下,執行 unset str; var=${str+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  36. 在 Bash shell 環境下,執行 str=""; var=${str+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=
  37. 在 Bash shell 環境下,執行 str="old"; var=${str+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=old
  38. 在 Bash shell 環境下,執行 unset str; var=${str:+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  39. 在 Bash shell 環境下,執行 str=""; var=${str:+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  40. 在 Bash shell 環境下,執行 str="old"; var=${str:+new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=old
  41. 在 Bash shell 環境下,執行 unset str; var=${str=new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=new
  42. 在 Bash shell 環境下,執行 str=""; var=${str=new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  43. 在 Bash shell 環境下,執行 str="old"; var=${str=new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old
  44. 在 Bash shell 環境下,執行 unset str; var=${str:=new};echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=new
  45. 在 Bash shell 環境下,執行 str=""; var=${str:=new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=new, str=new
  46. 在 Bash shell 環境下,執行 str="old"; var=${str:=new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old
  47. 在 Bash shell 環境下,執行 unset str; var=${str?new}; echo var="$var", str="$str" 的結果為何?
    Sol. -bash: str: new (錯誤訊息)
  48. 在 Bash shell 環境下,執行 str=""; var=${str?new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=, str=
  49. 在 Bash shell 環境下,執行 str="old"; var=${str?new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old
  50. 在 Bash shell 環境下,執行 unset str; var=${str:?new}; echo var="$var", str="$str" 的結果為何?
    Sol. -bash: str: new (錯誤訊息)
  51. 在 Bash shell 環境下,執行 str=""; var=${str:?new}; echo var="$var", str="$str" 的結果為何?
    Sol. -bash: str: new (錯誤訊息)
  52. 在 Bash shell 環境下,執行 str="old"; var=${str:?new}; echo var="$var", str="$str" 的結果為何?
    Sol. var=old, str=old


next up previous contents
Next: 實機練習題 Up: Shell 變數 Previous: 變數的變化與取代   Contents
2017-06-14