使用read命令來接受輸入
使用read來把輸入值分配給一個或多個shell變量
read后面跟變量,回車輸入內容,就可以把輸入的內容賦給變量
-p指定要顯示的提示
-s 靜默輸入,一般用于密碼
輸入的內容不顯示
-n N 指定輸入的字符長度N
當輸入的內容達到了5個字符會直接結束輸入
-d‘字符’ 輸入結束符
把!作為了結束符,在輸入內容時,當輸入!會直接結束輸入
-t N TIMEOUT為N秒
如果不輸入內容,10s后自動退出
read從標準輸入中讀取值,給每個單詞分配一個變量
所有剩余單詞都被分配給最后一個變量
read 變量名1 [變量名2] < 文件名
read不支持管道
read 變量名1 [變量名2] <<< “值1 [值2] …”
< 后面跟的是文件 <<< 后面跟的是變量的值
bash如何展開命令行
把命令行分成單個命令詞
展開別名
展開大括號的聲明({})
展開波浪符聲明(~)
命令替換$()和“)
再次把命令行分成命令詞
展開文件通配(*、?、[abc]等等)
準備I/0重導向(<、>)
運行命令
防止擴展
反斜線(\)會使隨后的字符按原意解釋(完全轉譯)
$ echo Your cost:\$5.00
Your cost:$5.00
不加反斜杠系統會把$5當成一個變量,但這個變量沒有值,則為空,而加上反斜杠,就把$按原意解釋,所以$5不變。
加引號來防止擴展
?單引號(’)防止所有擴展(完全轉譯)
?雙引號(”)(部分轉譯)也防止所有擴展,但是以下情況例外:
$(美元符號)-變量擴展
`(反引號)-命令替換
\(反斜線)-禁止單個字符擴展
!(嘆號)-歷史命令替換
bash的配置文件
按生效范圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
shell登錄兩種方式
交互式登錄:(不能繼承上一個shell)
(1)直接通過終端輸入賬號密碼登錄
(2)使用“su-UserName”切換的用戶
執行順序:/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile–> ~/.bashrc–> /etc/bashrc
非交互式登錄:(繼承上一個shell)
(1)suUserName
(2)圖形界面下打開的終端
(3)執行腳本
(4)任何其它的bash實例
執行順序:~/.bashrc–> /etc/bashrc–> /etc/profile.d/*.sh
在這幾個文件分別設置環境變量A,B,C,D,E
沒有重新登陸時,這幾個變量就不會生效,echo $A $B $C $D $E,什么都不顯示。重新登陸后,這幾個變量就會生效。
用非交互式登陸guanyu用戶,就會繼承上一個shell,所以echo 5個變量都會顯示。而用交互式登陸guanyu用戶,不能繼承上一個shell,就只能讀取/etc/profile ,/etc/profile.d/*.sh ,~/.bash_profile, ~/.bashrc, /etc/bashrc這幾個文件,而變量C,D都是在用戶root的家目錄設置的,只能讀取到變量A,B,E,所以echo這幾個變量只顯示變量A,B,E的值。
在root用戶下,將變量A的值改為A6,變量B的值改為B7,變量D的值改為D9,變量E的值改為E10,
然后不退出重新登陸,直接echo這幾個變量,當然不變,因為這幾個變量沒有生效,此時用非交互式登陸切到guanyu用戶下,變量A的值不變,盡管,變量A的值變為A6,但是用非交互式登陸,繼承了上一個shell變量A的值A1,但是不讀取/etc/profile這個文件,所以不更新變量A的值,變量B的值變為B7,是因為繼承了上一個shell變量B的值然后讀取/etc/profile.d/mage.sh這個文件,更新變量B的值。變量C3的值不變,變量D的值為D4,是因為繼承了上一個shell的變量D的值D4,又因為變量D在root用戶的家目錄里,所以不讀取,不更新變量D的值。變量E5的值為E10,是因為繼承了上一個shell的變量D的值,又讀取/etc/bashrc所以更新變量E的值,所以變量E的值為E10.
在用交互式登陸guanyu用戶,echo這幾個變量,不繼承上一個shell,只讀取文件,因為是交互式登陸,所以/etc/profile,/etc/profile.d/mage.sh,/etc/bashrc這幾個文件都能讀取,所以變量A,B,E的值為A6,B7,E10,又因為變量C,D都在root用戶的家目錄里,所以不能讀取,變量C,D的值為空。
給變量PATH增加內容,不能直接用”PATH=內容“,這樣會覆蓋掉原本的變量值,應該用“PATH=$PATH:內容”
Profile類
按功能劃分,存在兩類:
profile類和bashrc類
profile類:為交互式登錄的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
個人:~/.bash_profile
功用:
(1) 用于定義環境變量
(2) 運行命令或腳本
Bashrc類
bashrc類:為非交互式和交互式登錄的shell提供配置
全局:/etc/bashrc
個人:~/.bashrc
功用:
(1) 定義命令別名和函數
(2) 定義本地變量
編輯配置文件生效
修改profile和bashrc文件后需生效
兩種方法:
1重新啟動shell進程
2 . 或source
例:
. ~/.bashrc
$-變量
h:hashall,打開這個選項后,Shell 會將命令所在的路徑hash下來,避免每次都要查詢。通過set +h將h選項關閉,開啟是set -h
i:interactive-comments,包含這個選項說明當前的shell 是一個交互式的shell。所謂的交互式shell,在腳本中,i選項是關閉的。
m:monitor,打開監控模式,就可以通過Job control來控制進程的停止、繼續,后臺或者前臺執行等。
B:braceexpand,大括號擴展
H:history,H選項打開,可以展開歷史列表中的命令,可以通過!感嘆號來完成,例如“!!”返回上最近的一個歷史命令,“!n”返回第n 個歷史命令
原創文章,作者:fuming,如若轉載,請注明出處:http://www.www58058.com/84399