SHELL腳本編程之變量的種類

  1. 變量

    在進行腳本編程的時候,經常會使用到不同類型的變量,根據變量的生效范圍,可大致分為以下的幾類:

    • 本地變量:生效范圍為當前shell進程,對當前shell之外的其他shell進程,包括當前shell進程的子shell進程都是無效的,它的作用域就是當前shell進程

      blob.png

    • 環境變量:生效范圍是當前shell進程及其子進程

      blob.png

    • 局部變量:生效范圍是當前shell進程中某段代碼(通常為函數)

    • 位置變量:$1,$2…表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數

      blob.png

    • 特殊變量:$?,$0,$*,$@,$#

    位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數

    • $1,$…:對應第1,第2等參數,shift[n]換位置

      blob.png

      blob.png

    • $0:命令本身

      blob.png

    • $*:傳遞給腳本的所有參數,全部參數合為一個字符串

    • $@:傳遞給腳本的所有參數,每個參數為獨立字符串

      blob.png

      blob.png

    • $#:傳遞給腳本的參數的個數

      注:$@ $* 只有在被雙引號包起來的時候才會有差異

    $@和$*都表示傳遞給腳本的所有參數,當如上圖中這樣使用時,它們的作用效果一樣,但當引用的時候分別加上參數時,它們兩個就有了區別,如下圖:

    blob.png                    blob.png blob.png

    從上圖結果可以看出,使用了"$@"的位置變量,其輸出結果把輸入的三個數字當作了一個字符串,捆綁在了一起,所以輸入了三個數,但是就顯示了第一個數,而且第一個數就把所有數當作一個字符串輸出,第二第三個數就沒有輸出,使用了"$*"的位置變量,它的輸出結果就是正常的,雖然最后兩者輸出結果一樣,但兩者還是存在著是否當成一個整體輸出處理的區別

  2. 習題

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。

    blob.png

    blob.png

    2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中

    blob.png

    blob.png

    3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

    blob.png

    blob.png

    4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序

    blob.png
    blob.png

    5、寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和

    blob.png

    blob.png

    6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和

    blob.png

    blob.png

    7、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

    blob.png

    blob.png

    8、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

    blob.png

    blob.png

    9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該

    IP地址不可訪問”

    blob.png

    blob.png

    10、chmod -rw /tmp/file1,編寫腳本/root/bin/per.sh,判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫

    blob.png

    blob.png

    blob.png

    11、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統。

    blob.png

    12、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,先判斷是否合格IP,否,提示IP格式不合法并退出,是,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

    blob.png

    blob.png

    13、計算1+2+3+…+100的值

    blob.png

    blob.png

    14、計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之

blob.png

blob.png

blob.png

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

(0)
Stupid_LStupid_L
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • N25-第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;     ~]# fdisk /dev/sda  (n, +10G 創建10G分區,w保存退出)   &nbsp…

    Linux干貨 2017-01-22
  • 沒有自動ip解決辦法

    用虛擬機下載好centos6.9后,本來想查看ip地址,結果發現沒有自動獲取ip地址,在網上找了很多方法都不行,問題如下: 用命令ifconfig查看ip地址,發現沒有,如下 查看eth0如下 解決辦法如下: 1、關閉NetworkManager服務 2、關閉NetworkManager開機啟動 3、添加 /etc/sysconfig/network-scr…

    2017-07-16
  • Linux中的文本處理工具

    本章內容:   一、各種文本工具來查看、分析,統計文本文件   二、grep   三、正則表達式   四、擴展正則表達式   五、Sed 具體內容如下: 一、抽取文本的工具:      文件內容:less和cat      文件截?。篽ead和tai…

    Linux干貨 2016-08-08
  • 安全和加密

    安全基礎仿冒別人給某人發郵件telnet 127.0.0.1 25helo a.com 命令mail from:god@heaven.com 從某處發來的郵件rcpt to:root 給某人發郵件data 數據subject:hello 郵件名I miss you 郵件正文How old are you. 點代表結束quit redhat5普通用戶提升管理員…

    Linux干貨 2018-01-17
  • Linux基礎知識之cp mv rm

    該博文以CentOS6.8_x86_64系統為基礎,Xshell 5遠程連接CentOS系統,以root身份登錄系統和sjsir普通用戶身份登錄系統。 為什么要學習cp、mv、rm命令?     cp、mv、rm命令為Linux系統使用最長使用的三個命令之一,復制、移動和刪除是我們平時處理一些文件必須要學會的命令,應該用于熟練掌握和使用的…

    Linux干貨 2016-07-29
  • netstat

    netstat命令 netstat 命令用于顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等 1 常用選項: -a :(all)顯示所有選項,默認不顯示LISTEN相關 -t :(tcp)僅顯示tcp相關選項 -u :(…

    Linux干貨 2017-05-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-16 14:45

    文章層次結構分明,態度端正,加油!!!

欧美性久久久久