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 09:26
下一篇 2016-08-15 10:26

相關推薦

  • SElinux

    SElinux:Secure Enhanced Linux   SElinux工作與linux內核中他所實現的功能叫做強制訪問控制機制。DAC:是linux的自主訪問控制。MAC:是SElinux引入的訪問法則,叫作強制訪問控制。   SElinux有兩種工作級別:     strick:嚴格級別,每個進程都收到SEl…

    Linux干貨 2016-09-23
  • 七.Linux博客-2016年8月4日cat、cut、less、head、tail、wc、sort、uniq、grep

    格式說明: 操作 概念 命令 說明及舉例 七.cat、cut、less、head、tail、wc、sort、uniq、grep cat cat -A a.txt 查看隱藏內容 cat -n a.txt 顯示行號 cat -s a.txt 壓縮空行,把多行空行壓縮為一行 …

    Linux干貨 2016-08-24
  • 10個有用的Linux命令面試問題及答案

    1. 如何暫停一個正在運行的進程,把其放在后臺(不運行)? 答案:為了停止正在運行的進程,讓其在后臺運行,我們可以使用組合鍵 Ctrl+Z。 2. 什么是安裝Linux所需的最小分區數量,以及如何查看系統啟動信息? 答案:單獨一個/root分區足以執行所有的系統任務,但是強烈建議安裝Linux時,需要至少三個分區:/root,/boot,/swap。一個ID…

    2017-09-05
  • Docker入門

    一、Docker 架構 Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。 Docker 容器通過 Docker 鏡像來創建。 容器與鏡像的關系類似于面向對象編程中的對象與類。 Docker 面向對象 容器 對象 鏡像 類 Docker 鏡像(Images) Docker 鏡像是用于創建 Docker 容器的…

    2018-01-20
  • 優云APM最佳實踐: 診斷平安城市視頻網性能問題

    前言: 平安城市已經是一個關系你我他的民生工程,但由于本身系統的復雜性,給運維工作帶來了極大的挑戰。如何保障攝像頭在線率?如何在系統中找到視頻系統故障的問題所在?在我們某一次項目經歷中,優云APM在發現問題,定位故障等方面,起了很大作用,幫助我們順利的定位到了系統的故障所在。 平安城市是一個特大型、綜合性非常強的管理系統,不僅需要滿足治安管理、城市管理、交通…

    Linux干貨 2016-08-05
  • 網絡相關命令

    網絡相關命令 常用命令 ifcfg家族:   ifconfig:配置IP,NETMASK   route :路由   netstat : 狀態及統計數據查看 iproute2家族     ip  系列 &nbs…

    Linux干貨 2016-09-07

評論列表(1條)

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

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

欧美性久久久久