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的值為A6B7,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

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

shell腳本2

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

(0)
fumingfuming
上一篇 2017-08-11 19:31
下一篇 2017-08-11 20:23

相關推薦

  • 馬哥教育網絡班19期第二周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cd:切換目錄命令實例  cd [dirctory] 切換目錄  cd .. 返回上一級目錄  cd –  來回切換  cd ~  切換到家目…

    Linux干貨 2016-06-19
  • Linux文件類型及顏色標識整理

    Linux文件類型及顏色標識整理 Linux文件系統中有如下的文件類型: 類型1:普通文件—-à白色 類型2:目錄文件—à藍色 類型3:鏈接文件—à淺藍色 類型4:字符設備文件—à黃色 類型5:塊設備文件—-à黃色 類型6:管道文件—à青黃色 類型7:套接字文件—à粉紅色 為…

    Linux干貨 2016-10-19
  • LVM基本應用,擴展以及縮減的實現

    這是一篇馬哥課堂博客作業,這次換個表現方式寫,前面先寫總體的操作過程,后面顯示詳情 其實馬哥視頻講的非常詳盡,聽起來特別容易理解,只是讓我要寫出來那得費九牛二虎之力,估計還得照著視頻寫。如下僅是看過視頻之后的一個操作過程,比較粗糙,僅僅是作業。。。 LVM:logical volume manager version2 邏輯卷管理系統 PV:physical…

    Linux干貨 2016-06-28
  • 干貨 | 20 行 Python 代碼創建可視化地圖

    當我開始建造Vincent時, 我的一個目的就是使得地圖的建造盡可能合理化. 有一些很棒的python地圖庫-參見Basemap?和?Kartograph能讓地圖更有意思. 我強烈推薦這兩個工具, 因為他們都很好用而且很強大. 我想有更簡單一些的工具,能依靠Vega的力量并且允許簡單的語法點到geoJSON文件,詳細描述一個投影和大小/比列,最后輸出地圖. …

    2017-09-08
  • vsftpd基于mysql實現用戶認證

    一、前言   ftp介紹:     ftp全程是File Transfer Protocol(文件傳輸協議),方便于實文件交換;但是在文件傳輸以及賬號密碼發送時都是以明文傳輸,因此是一個明文協議 ftp是C/S方式:   常見的客戶端有:     GUI方式:browers、FileZilla-cl…

    Linux干貨 2015-06-15
  • 高性能集群軟件Keepalived

    Keepalived的介紹以及安裝與配置

    2017-09-18
欧美性久久久久