shell腳本2

使用read命令來接受輸入

使用read來把輸入值分配給一個或多個shell變量

shell腳本2

read后面跟變量,回車輸入內容,就可以把輸入的內容賦給變量


-p指定要顯示的提示

shell腳本2


-s 靜默輸入,一般用于密碼

shell腳本2

輸入的內容不顯示


-n N 指定輸入的字符長度N

shell腳本2

當輸入的內容達到了5個字符會直接結束輸入


-d‘字符輸入結束符

shell腳本2

把!作為了結束符,在輸入內容時,當輸入!會直接結束輸入


-t N TIMEOUT為N秒

shell腳本2

如果不輸入內容,10s后自動退出


read從標準輸入中讀取值,給每個單詞分配一個變量

所有剩余單詞都被分配給最后一個變量

shell腳本2


read 變量名1 [變量名2] < 文件名

shell腳本2


read不支持管道


read 變量名1 [變量名2] <<< “值1 [值2] …”

shell腳本2


< 后面跟的是文件 <<< 后面跟的是變量的值

 

 


bash如何展開命令行

把命令行分成單個命令詞

展開別名

展開大括號的聲明({})

展開波浪符聲明(~)

命令替換$()和“)

再次把命令行分成命令詞

展開文件通配(*、?、[abc]等等)

準備I/0重導向(<、>)

運行命令

 



防止擴展

反斜線(\)會使隨后的字符按原意解釋(完全轉譯)

$ echo Your cost:\$5.00

Your cost:$5.00

shell腳本2

不加反斜杠系統會把$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

shell腳本2

在這幾個文件分別設置環境變量A,B,C,D,E

shell腳本2

沒有重新登陸時,這幾個變量就不會生效,echo $A   $B $C $D $E,什么都不顯示。重新登陸后,這幾個變量就會生效。

shell腳本2

用非交互式登陸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的值。

shell腳本2

root用戶下,將變量A的值改為A6,變量B的值改為B7,變量D的值改為D9,變量E的值改為E10,

shell腳本2

然后不退出重新登陸,直接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,又因為變量Droot用戶的家目錄里,所以不讀取,不更新變量D的值。變量E5的值為E10,是因為繼承了上一個shell的變量D的值,又讀取/etc/bashrc所以更新變量E的值,所以變量E的值為E10. 

shell腳本2

 shell腳本2

在用交互式登陸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:內容

shell腳本2

 

 



Profile類

按功能劃分,存在兩類:

profile類和bashrc

profile類:為交互式登錄的shell提供配置

全局:/etc/profile, /etc/profile.d/*.sh

個人:~/.bash_profile

功用:

(1) 用于定義環境變量

(2) 運行命令或腳本

 



Bashrc類

bashrc類:為非交互式和交互式登錄的shell提供配置

全局:/etc/bashrc

個人:~/.bashrc

功用:

(1) 定義命令別名和函數

(2) 定義本地變量

 



編輯配置文件生效

修改profilebashrc文件后需生效

兩種方法:

1重新啟動shell進程

2 . source

:

. ~/.bashrc

 




$-變量

hhashall,打開這個選項后,Shell 會將命令所在的路徑hash下來,避免每次都要查詢。通過set +hh選項關閉,開啟是set -h

shell腳本2

iinteractive-comments,包含這個選項說明當前的shell 是一個交互式的shell。所謂的交互式shell,在腳本中,i選項是關閉的。

mmonitor,打開監控模式,就可以通過Job control來控制進程的停止、繼續,后臺或者前臺執行等。

Bbraceexpand,大括號擴展

shell腳本2

Hhistory,H選項打開,可以展開歷史列表中的命令,可以通過!感嘆號來完成,例如“!!”返回上最近的一個歷史命令,“!n”返回第n 個歷史命令

shell腳本2

原創文章,作者:fuming,如若轉載,請注明出處:http://www.www58058.com/84399

(0)
fumingfuming
上一篇 2017-08-11
下一篇 2017-08-11

相關推薦

  • 程序包管理yum

    YUM: YellowdogUpdate Modifier,rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包 存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄下:repodata) 文件服務器:     ftp://     http:// &n…

    Linux干貨 2016-08-23
  • 三種方案實現tomcat反代服務

    要求: 分別實現這三種架構:    1、nginx + tomcat cluster    2、httpd(proxy_http_module)+tomcat cluster    3、httpd(proxy_ajp_module)+tomcat cluster;   &nbsp…

    2017-07-03
  • 關于加密那點事

    作者【Jev Tse】 環境:sentos6.8     【本文預覽】      一、關于加密      二、對稱加密      三、非對稱加密      四、單向散列 …

    Linux干貨 2016-12-01
  • TCP詳解

    TCP協議詳解   TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個使用TCP/IP協議的協議集合。他取代了OSI七層模型,成為事實上的應用于實際的模型。 TCP/IP協議與OSI協議的關系如下:   各層的作用如下: TCP特性: 工作在傳輸層面向連接協議 全雙工協議 半關閉 錯誤檢查 將數據打包成段,排序 確認機制 …

    2017-09-02
  • 8.5_Linux文本處理工具和grep之正則表達式的使用

    Linux文本處理工具使用 文件查看工具的使用 cat 命令的使用  此命令一般用于查看文件內容比較多 NAME        cat – concatenate files and print on the&…

    Linux干貨 2016-08-08
  • 馬哥教育網絡班21期+第12周課程練習

    httpd學習前知識必備: I/O類型 同步和異步 synchronous asynchronous  關注的是消息通知機制,如何通知調用者,站在被調用者的角度 同步:調用發出后不會立即返回,一旦返回即是最終結果 異步:調用發出后會立即返回消息,但不是最終結果,被調用者通過狀態,通知機制,或回調函數處理結果 阻塞和非阻塞 block nonbloc…

    Linux干貨 2016-08-15
欧美性久久久久