bash之腳本入門及課后作業

概述:

shell是一個工具程序,在用戶登錄后后系統啟動,它解釋并運行由命令或腳本文件輸入的命令,從而實現用戶與內核之間的交互。bash是Linux操作系統上默認的shell,在交互和編程兩方面,bash提供了許多Bourne shell沒有的功能,并且還結合了C shell和Kron shell最有用的功能。

bash的語法和結構

    1、shbang行:

        shbang行是腳本的第一行,它通知內核使用哪種shell解釋腳本中的行

 #!/binbash

    2、注釋:

        注釋由一個#號后跟一些描述性的說明組成,它們可以從行的任意位置開始,在行的末尾結束。

 2 #10user id add 20user id sum
 3 #author:xiaoshui

    3、顯示輸出

        echo命令用于向屏幕顯示輸出,通配符必須使用反斜線和配對引號進行轉意

1 #!/bin/bash
2 #function: hello world
3 #author:xiaoshui
4 echo "hello world"

    4、局部變量

        局部變量的作用域被限定在當前的shell中,當一個腳本執行結束,它們不可再用。也就是說它們超出了作用域,生效范圍為當前shell進程中某代碼片斷(通常指函數)

    5、本地變量

        本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效。

[root@localhost ~]# var2=two //在當前shell中定義var2
[root@localhost ~]# chmod +x test1.sh 
[root@localhost ~]# ./test1.sh 
one

[root@localhost ~]# vi test1.sh

  1 #!/bin/bash
  2 #test local var
  3 var1=one
  4 echo "$var1"
  5 echo "$var2" //顯示不了父進程定義的var2

    6、環境變量

        生效范圍為當前shell進程及其子進程

[root@localhost ~]# unset var2 //取消var2的值
[root@localhost ~]# export var2=two //設置var2為環境變量
[root@localhost ~]# ./test1.sh  //執行test1腳本
one
two
[root@localhost ~]# vi test1.sh 

  1 #!/bin/bash
  2 #test local var
  3 var1=one
  4 echo "$var1"
  5 echo "$var2" //調用父進程的var2

        顯示所有環境變量:export,env,printenv

    7、位置變量

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

[root@localhost ~]# vi v2.sh 

  1 #!/bin/bash
  2 #function: test //此實驗的目的就是為了測試$10是${10}還是$1+0
  3 #author: xiaoshui
  4 
  5 echo $10  
  6 echo $11
  7 echo $12
  8 echo "=========="
  9 echo ${10}
 10 echo ${11}
 11 echo ${12}
[root@localhost ~]# ./v2.sh a b c d e f g h i j k l
a0     //很顯然,結果為$1+0
a1     //同樣結果為$2+1
a2
==========
j      //顯然此為${10}
k      //${11}
l

        上述例子表明,位置變量$1..$9中,變量引用沒有問題,當到了$10以后,此時如果不把10用花括號括住,則會被識別為$1+#(#為數字)

    8、特殊變量

        $0: 命令本身
        $*: 傳遞給腳本的所有參數,全部參數合為一個字符串
        $@: 傳遞給腳本的所有參數,每個參數為獨立字符串
        $#: 傳遞給腳本的參數的個數

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

[root@localhost test]# vi test2.sh 

  1 #!/bin/bash
  2 # test
  3 echo "file name: $0"
  4 echo "first argue: $1"
  5 echo "two argue: $2"
  6 echo "all argues: "$*""
  7 echo "all argues: "$@""
  8 echo "argue numbers: $#"
  9 touch file_"$*" //利用touch來測試$*和$@的區別,
 10 touch file."$@" //
[root@localhost test]# ./test2.sh 1 2 3
file name: ./test2.sh
first argue: 1
two argue: 2
all argues: 1 2 3
all argues: 1 2 3
argue numbers: 3
[root@localhost test]# ll
total 4
-rw-r--r-- 1 root root   0 Aug 12 16:28 2 //詞尾$@第二個
-rw-r--r-- 1 root root   0 Aug 12 16:28 3//此為$@第三個
-rw-r--r-- 1 root root   0 Aug 12 16:28 file.1//此為$@第一個
-rw-r--r-- 1 root root   0 Aug 12 16:28 file_1 2 3//仔細觀察可以發現此為$*
-rwxr-xr-x 1 root root 189 Aug 12 16:28 test2.sh

    由上述例子可以得出,$*全部參數合為一個字符串,$@每個參數為獨立字符串

課后作業:

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

2016-08-12_085244.png

2016-08-11_195422.png

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

2016-08-12_085324.png
2016-08-11_200133.png

    

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

2016-08-12_085357.png

2016-08-11_200849.png

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

2016-08-12_085433.png

2016-08-11_202333.png

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

2016-08-12_085509.png

2016-08-11_202932.png

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

2016-08-12_085544.png

2016-08-11_203949.png

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

2016-08-12_085619.png

2016-08-11_204553.png

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

2016-08-11_203949.png

2016-08-11_205357.png

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

2016-08-12_085705.png

2016-08-11_205941.png

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

2016-08-12_085740.png2016-08-11_210846.png2016-08-11_210856.png

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

2016-08-12_090000.png

2016-08-12_090028.png

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

2016-08-12_103240.png2016-08-11_222718.png

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

2016-08-12_091332.png2016-08-12_091412.png

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

2016-08-12_102448.png

2016-08-12_102514.png

備注:第十一題和第十三題注釋區域有疑問。

原創文章,作者:我的滑板鞋,如若轉載,請注明出處:http://www.www58058.com/34005

(0)
我的滑板鞋我的滑板鞋
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • 計算機組成原理

                                 計算機組成原理 Linux 操作系統是UNIX 操作系統的一種克隆系統。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時間)。以后借助于…

    Linux干貨 2016-10-27
  • Linux磁盤和文件系統管理

    Linux磁盤和文件系統管理 linux磁盤管理 一、Linux設備類型     硬盤有機械硬盤(HDD)和固態硬盤(SSD)之分。機械硬盤即是傳統普通硬盤,主要由:盤片,磁頭,盤片轉軸及控制電機,磁頭控制器,數據轉換器,接口,緩存等     幾個部分組成。  &nbs…

    Linux干貨 2016-04-11
  • linux學習心得

    Linux學習心得 之前沒怎么了解過linux運維,機緣巧合來到了這里,剛剛開始一臉蒙圈,或者說現在仍然是,不過最大的收獲是我在這里真正認真學習了,有了一個端正的態度,一切都是好的開始。 這一周,我學習了linux的發展史,如何安裝系統,一些簡單的命令等。。。。下面我一一介紹一下,初學者,可能簡單粗暴,多多指教! 系統安裝: 1:首先用光盤進行linuxIS…

    2017-07-16
  • 用戶,組和權限管理 基礎命令整理

    安全3A任何一個安全策略都應該有Authentication(認證)、Authentication(授權)、Accouting|Audition(審計)這三個措施。 用戶(User)Linux用戶是安全3A中的Authentication(認證)措施。用戶在登錄時,系統會檢查用戶輸入的用戶名和密碼。如果用戶輸入的用戶名和密碼匹配,會根據用戶信息給用戶分配一個…

    Linux干貨 2017-03-16
  • linux命令格式和常用命令

    Linxu命令使用格式 ~]#COMMAND OPTIONS ARGUMENTS CMMMAND:發起一命令:請求內核將某個二進制程序運行為一個進程; OPTIONS:指定命令的運行特性; 短選項:-C, 例如-l, -d 注意:有些命令的選項沒有-; 如果同一命令同時使用多個短選項,多數可合并:-l -d = -ld 長選項:–word, 例如…

    Linux干貨 2018-03-04
  • 淺談Nginx(二)—http下server配置

    淺談Nginx(二)—http下server配置 此文介紹Nginx下的http模塊,著重介紹http模塊下的server服務 ——–依據”馬哥教育”主講人馬永亮導師的上課筆記整理——- 目錄  一. http相關的基本配置:     1)…

    系統運維 2017-02-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-16 15:48

    總結的很詳細,思路很清晰,作業完成的很用心,再接再厲,

欧美性久久久久