4.1 問題
本案例要求進一步熟悉Shell變量的賦值控制,主要練習或驗證下列內容:
三種引號對賦值的影響
使用read命令從鍵盤讀取變量值
使用export發佈全局變量
4.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:三種引號對變量賦值的影響
1)雙引號的應用
使用雙引號可以界定一個完整字符串。
[root@svr5 ~]# xx=Tarena IT Group
-bash: IT: command not found //未界定時賦值失敗
[root@svr5 ~]# xx="Tarena IT Group" //界定後成功
[root@svr5 ~]# touch aa bb //創建了兩個文件
[root@svr5 ~]# touch "aa bb" //創建了一個文件
[root@svr5 ~]# ls //查看結果
2)單引號的應用
界定一個完整的字符串,並且可以實現屏蔽特殊符號的功能。
[root@svr5 ~]# test=11
[root@svr5 ~]# echo "$test"
[root@svr5 ~]# echo '$test'
3)反撇號或$()的應用
使用反撇號或$()時,可以將命令執行的標準輸出作爲字符串存儲,因此稱爲命令替換。
[root@svr5 ~]# tar -czf log-`date +%Y%m%d`.tar.gz /var/log
步驟二:使用read命令從鍵盤讀取變量值
1)read基本用法
執行後從會等待並接受用戶輸入(無任何提示的情況),並賦值給變量str:
[root@svr5 ~]# read str
What's happen ? //隨便輸入一些文字,按Enter鍵提交
[root@svr5 ~]# echo $str //查看賦值結果
What’s happen ?
爲了不至於使用戶不知所措、莫名其妙,推薦的做法是結合-p選項給出友好提示:
[root@svr5 ~]# read -p "請輸入一個整數:" i
請輸入一個整數:240
[root@svr5 ~]# echo $i
240
2)stty終端顯示控制
將回顯功能關閉(stty -echo),
將回顯功能恢復(stty echo)。
可參考下列操作創建一個測試腳本:
[root@svr5 ~]# vim user.sh //創建一個測試腳本
#!/bin/bash
read -p "請輸入用戶名:" username //讀取用戶名
stty -echo //關閉回顯
read -p "請輸入密碼:" passwd //讀取密碼
stty echo //恢復回顯
echo "" //恢復回顯後補一個空行
useradd "$username"
echo "$passwd" | passwd --stdin "$username"
[root@svr5 ~]# chmod +x user.sh //添加執行權限
執行測試腳本user.sh,驗證效果:
[root@svr5 ~]# ./user.sh
請輸入用戶名: root //輸入root,回車
請輸入密碼: //輸入1234567(不會顯示),回車
步驟三:使用export發佈全局變量
默認情況下,自定義的變量爲局部變量,只在當前Shell環境中有效,而在子Shell環境中無法直接使用。比如已定義的SCHOOL變量,當進入到sh或bash子Shell後,變量SCHOOL將處於未定義的狀態:
[root@svr5 ~]# yy="Tarena IT Group"
[root@svr5 ~]# echo $yy
Tarena IT Group
[root@svr5 ~]# bash //開啓bash子進程
[root@svr5 ~]# echo $yy //查看SCHOOL變量值無結果
[root@svr5 ~]# exit //返回原有Shell環境
exit
[root@svr5 ~]# echo $yy
若希望定義的變量能被子進程使用,可以使用export命令將其發佈爲全局變量。使用export發佈時,只需指定變量名(可以有多個)即可,也可以通過export命令直接設置新的全局變量:
[root@svr5 ~]# export yy //發佈已定義的變量
[root@svr5 ~]# export XX="1234" //發佈新變量
驗證剛剛發佈的全局變量:
[root@svr5 ~]# bash //進入bash子Shell環境
[root@svr5 ~]# echo $yy //查看全局變量的值 .. ..
Tarena IT Group
[root@svr5 ~]# echo $XX
1234