一、read 接收鍵盤輸入
read [選項] [變量名]
選項:
-p 提示信息 point
-t 秒數time
-n 字符數number
-s隱藏輸入的數據secret
例子:使用read 提示輸入參數值

結果:

與位置參數變化相比,更友好
二、declare 聲明變量類型
+ 取消變量的類型屬性
- 給變量設置類型屬性
-a 設置變量類型為數組array
-i 將變量類型聲明為整數型int
-x 將變量聲明為環境變量
-p 顯示變量的被聲明類型
例如1:a 沒有定義類型,默認為字符串,當定義a為整型(-i),在將字符串賦值給a時,此時當然會失敗,輸出為0.查看a的屬性(-p),為整形
gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -- a="1" gjl@gjl-virtual-machine:~/shellTest$ declare -i a gjl@gjl-virtual-machine:~/shellTest$ a='we' gjl@gjl-virtual-machine:~/shellTest$ echo $a 0 gjl@gjl-virtual-machine:~/shellTest$ a=12 gjl@gjl-virtual-machine:~/shellTest$ echo $a 12 gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -i a="12"
例如2:聲明b為數組,並顯示數組
gjl@gjl-virtual-machine:~/shellTest$ declare -a c='([0]=1 [2]='11' [3]='aa')' gjl@gjl-virtual-machine:~/shellTest$ echo ${c[2]} 11
數組賦值
1、按需添加
gjl@gjl-virtual-machine:~/shellTest$ b[0]=1 gjl@gjl-virtual-machine:~/shellTest$ b[1]=2 gjl@gjl-virtual-machine:~/shellTest$ echo ${b[*]} 1 2 gjl@gjl-virtual-machine:~/shellTest$ echo ${b[@]} 1 2
2、一次性添加多個元素
gjl@gjl-virtual-machine:~/shellTest$ declare -a c gjl@gjl-virtual-machine:~/shellTest$ c=(1 2 3) gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]} 1 2 3
3、按稀疏格式添加
gjl@gjl-virtual-machine:~/shellTest$ declare -a c='([0]=1 [2]='11' [3]='aa')' gjl@gjl-virtual-machine:~/shellTest$ echo ${c[2]} 11
數組不是按照0123這樣的順序來的
4、通過read -a 方式添加
#!/bin/bash read -p "please input shuzu:" -a e echo ${e[*]} echo ${e[2]} gjl@gjl-virtual-machine:~/shellTest$ test07.sh please input shuzu:3 4 34 3 4 34 34
注意事項:引用變量的時候,花括號不能少,用括號來表示數組,數組元素用"空格"符號分割開

刪除數組中的某個值/刪除數組
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]} 1 2 3 gjl@gjl-virtual-machine:~/shellTest$ unset c[2] gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]} 1 2 gjl@gjl-virtual-machine:~/shellTest$ unset c gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]} gjl@gjl-virtual-machine:~/shellTest$
取消變量的類型
例如:a為整型,使用+ 刪除a的整型屬性
gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -i a="12" gjl@gjl-virtual-machine:~/shellTest$ declare +i a gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -- a="12" gjl@gjl-virtual-machine:~/shellTest$
三、運算
數值運算的三種方法
①declare(不推薦)
②使用expr或let 運算工具(不推薦)
gjl@gjl-virtual-machine:~$ a=12 gjl@gjl-virtual-machine:~$ b=23 gjl@gjl-virtual-machine:~$ c=$(expr $a + $b) gjl@gjl-virtual-machine:~$ echo $c 35 gjl@gjl-virtual-machine:~$ let e=$a+$b gjl@gjl-virtual-machine:~$ echo $e 35 gjl@gjl-virtual-machine:~$ 注意事項:1、+兩邊需要空格 2、$() 是指調用系統命令
③使用$(()) 或$[] 進行數值運算
gjl@gjl-virtual-machine:~$ a=11 ; b=33 gjl@gjl-virtual-machine:~$ echo c=$(($a+$b)) c=44 gjl@gjl-virtual-machine:~$ echo d=$[$a+$b] d=44 gjl@gjl-virtual-machine:~$
例子:四則運算計算器(第一版)
#!/bin/bash read -t 30 -p "please input num1:" num1 read -t 30 -p "please input num2:" num2 read -t 30 -p "please input operato:[+-*/]:" oper [ "$oper" == "+" ] && echo "$(($num1+$num2))" && exit [ "$oper" == "-" ] && echo "$(($num1-$num2))" && exit [ "$oper" == "*" ] && echo "$(($num1*$num2))" && exit [ "$oper" == "/" ] && echo "$(($num1/$num2))" && exit echo "please input a varible operato"
缺點及注意點:此例中num1、num2未作判斷。且[] 兩邊需要空格,否則會報錯
四、變量的測試與內容置換

例如1:如果沒有設置變量a,則x值為新值。如果a設置為空,則x值為空值。如果設置為123,則x的值為123.
可以用來測試變量是否存在或者有值

