初窺門徑shell腳本

1.什么是shell腳本

   首先它是一個腳本,并不能作為正式的編程語言。因為是跑在linux的shell中,所以叫shell腳本。確切的說shell腳本就是一些命令的集合。

2.寫腳本前的一些細節及建議

  Shell腳本通常都是以.sh 為后綴名的,這個并不是說不帶.sh這個腳本就不能執行,只是大家的一個習慣而已。所以,以后你發現了.sh為后綴的文件那么它可能是一個shell腳本了。test.sh中第一行要以 “#! /bin/bash” 開頭,它代表的意思是,該文件使用的是bash語法。如果不設置該行,雖然你的shell腳本也可以執行,但是這不符合規范。 # 表示注釋。后面跟一些該腳本的相關注釋內容以及作者和創建日期或者版本等等。當然這些注釋并非必須的,如果你懶的很,可以省略掉,但是我們不建議省略。因為隨著工作時間的逐漸過渡,你寫的shell腳本也會越來越多,如果有一天你回頭查看自己寫過的某個腳本時,很有可能忘記該腳本是用來干什么的以及什么時候寫的。所以寫上注釋是有必要的。另外系統管理員并非只有你一個,如果是其他管理員查看你的腳本,他看不懂豈不是很郁悶。

3.shell腳本編程基礎 

 3.1 基本數學運算

    [root@localhost sbin]# vim first.sh 

    [root@localhost sbin]# bash first.sh 5 6

    11

    [root@localhost sbin]# cat first.sh 

    #! /bin/bash

    ##This is my first shell script

    ##Writen by zhangliang  2016-08-10

    echo $[ $1+$2 ]

    [root@localhost sbin]# 

    QQ圖片20160811154025.png

    其中腳本中的$1和$2為shell腳本的預設變量,沒有限制的。$0代表腳本本身的名字。

    

    [root@localhost sbin]# sh first.sh  1 2

    1 2 first.sh

    [root@localhost sbin]# cat first.sh 

    #! /bin/bash

    ##This is my first shell script

    ##Writen by zhangliang  2016-08-10

    echo "$1 $2 $0"

   上部中的“sh first.sh  1 2”命令其實一般需要有執行權限x   如沒有則可用# chmod + first.sh來添加。

  3.2命令date

    實例 一.Y表示四位數字格式打印年份  y表示兩位數字格式打印年份  其他的則為英文單詞開頭字母大寫

               [root@localhost sbin]# date +"%Y-%m-%d %H:%M:%S"

               2016-08-11 19:07:24

         二. 表示前一天的日期:

               [root@localhost sbin]# date -d "-1 day" +%d

               10

    

   3.3參數前移

      [root@localhost sbin]# vim shift.sh 

     [root@localhost sbin]# sh -x shift.sh             由此可知shift命令每執行一次,變量的個數($#)

     + '[' 0 -eq 0 ']'                                                                               

     [root@localhost sbin]# sh -x shift.sh 1 2 3 4        減一, 變量值提前一位。                         

     + '[' 4 -eq 0 ']'

     + echo

                                                                                                  

     + shift                                                                                         

     + '[' 3 -eq 0 ']'                                                                                     + echo

     + shift

     + '[' 2 -eq 0 ']'

     + echo

     + shift                                                             

     + '[' 1 -eq 0 ']'

     + echo                                                QQ圖片20160811204744.png

     + shift                                

     + '[' 0 -eq 0 ']'

     [root@localhost sbin]# vim shift.sh 

     [root@localhost sbin]# cat shift.sh 

   

 3.4如何計在shell腳本中錨定計數空格行

     [root@localhost sbin]# 

     [root@localhost sbin]# vim konghang.sh 

     [root@localhost sbin]# bash konghang.sh /etc/fstab /etc/issue

     Total blank lines: 2

     QQ圖片20160811153943.png 

     shift命令還有另外一個重要用途,Bsh定義了9個位置變量,從$1到$9,這并不意味著用戶在命令行只能使用9個      參數,借助shift命令可以訪問多于9個的參數。

4實戰演練

  4.1計算1+2+3+…+100的值

  初窺門徑shell腳本

  初窺門徑shell腳本

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

    #! /bin/bash

   ## writer:zhangliang 2016-8-13

   [[  $# -lt 1  ]] && echo "less input one num" || (grep '^$' | wc -l)

   [root@localhost sbin]# bash argsnum.sh /etc/rc.d/init.d/function

   105

   [root@localhost sbin]# bash argsnum.sh 

   less input one num

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

   #! /bin/bash

  ##wrtrer hangliang 2016-8-13

  max='df' |tr -s '' '%'|cut -d '%' -f5|sort -n|tial -1'

  echo "list the maxdisk liyonglu: $max"

  [root@localhost sbin]# ./disk.sh

  list the disk liyonglu: 52

 4.4.使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添      加之;顯示添加的用戶的id號等信息

#! /bin/bash

##writerzhangliang:2016-08-12 11:09:20

read -p "please input a username: " USERNAME

#`id $USERNAM` &> /dev/null

if id $USERNAME &> /dev/null ; then

        echo "the user exist" 

        exit 100

else

        useradd $USERNAME &> /dev/null

        echo "the user add sucessfully and its info is:`id $USERNAME`"

        exit 99

fi

unset USERNAME

5小結

 由前面例題及小題,深有體會前面學的正則表達式grep,sed工具的重要性

 grep語法: grep  [-cinvABC]  'word'  filename

 -c :打印符合要求的行數

 -i :忽略大小寫 -n :在輸出符合要求的行的同時連同行號一起輸出

 -v :打印不符合要求的行

 . 正則表達式中, “^” 表示行的開始, “$” 表示行的結尾,那么空行則可以用        “^$” 表示

 . 如果是數字的話就用[0-9]這樣的形式,當然有時候也可以用這樣的形式[15]即     只含有1或者5,注意,它不會認為是15。如果要過濾出數字以及大小寫字母則     要這樣寫[0-9a-zA-Z]。另外[ ]還有一種形式,就是[^字符] 表示除[ ]內的字     符之外的字符

 . 表示任意一個字符,上例中,就是把符合r與o之間有兩個任意字符的行過濾出      來, * 表示零個或多個前面的字符。 ‘.*’ 表示零個或多個任意字符,空行也包    含在內.

 .  用( )表示一個整體,例如(oo)+就表示1個 ‘oo’ 或者多個 ‘oo’

    sed與grep有些相通  ,sed -e可以實現多個行為;‘d’ 這個字符就是刪除的動     作了,不僅可以刪除指定的單行以及多行,而且還可以刪除匹配某個字符的         行,另外還可以刪除從某一行一直到文檔末行; ‘s’ 就是替換的命令, ‘g’ 為本     行中全局替換,如果不加 ‘g’ 只換該行中出現的第一個。除了可以使用 ‘/’ 作為     分隔符外,還可以使用其他特殊字符例如 ‘#’ 或者 ‘@’ 都沒有問題。[0-9]表       示任意的數字。這里你也可以寫成[a-zA-Z]甚至[0-9a-zA-Z]; () 可以把替換     的字符括起來成為一個整體。

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

(0)
ZzuimengZzuimeng
上一篇 2016-08-15 09:22
下一篇 2016-08-15 09:22

相關推薦

  • grub應用 (Blog 10)

    grub1.x 、grub2.x詳解

    2017-11-27
  • keepalived高可用雙主lvs-dr模型集群

    環境 centos6.8 在keepalived服務器上安裝keepalived RS服務器上安裝nginx ,安裝過程省略 為了便于實驗,四臺機器將關閉iptables和selinux 配置如下: K1: #修改keepalived配置文件 vim /etc/keepalived/keepalived.conf ! Configuration File f…

    2017-05-13
  • sed工具的基本用法

    sed -n(不輸出模式,不自動打?。?sed -d(刪除匹配到的內容) sed-e(多點編輯) sed-r(支持擴展正則表達式) sed#,#(地址定界,在此范圍中匹配) sed 1~2   sed 2~2 (找奇數行和偶數行) sed =(為打印到的內容編輯行號)  sed?。ㄈ》矗?sed s///(查找替換,支持使用其他…

    Linux干貨 2017-05-02
  • 進程管理

    簡述進程的相關理論與工具使用

    2017-09-09
  • GNU awk基礎

    awk介紹 awk:Aho, Weinberger, Kernighan,報告生成器,格式化文本輸出 有多種版本:New awk(nawk),GNU awk( gawk) gawk:模式掃描和處理語言 基本用法: awk [options] ‘program’ var=value file… awk [options] -f programfile var=…

    Linux干貨 2018-01-01
  • 軟件包管理和磁盤管理

    軟件運行和編譯 ABI :Application Binary Interface 應用程序二進制接口     Windows和Linux不兼容      PE格式   ELF格式 庫級別的虛擬化:       Linu…

    2017-04-24
欧美性久久久久