?Bash2

字串比較時變量最好使用""

blob.png

這樣就不會報錯了,只是退出碼不為0

組合條件:

    與:[ condition1 -a condition2 ]或condition1 && condition2

    或:[ condition1 -o condition2 ]或condition1 || condition2

     非:[ -not condition ]或者 ! condition

練習:如果當前主機的主機名為空,或為'localhost',將其修改為www.magedu.com

blob.png

練習:如果某用戶存在,且answer變量的值為"yes",則顯示用戶的id號,否則,說用戶選擇了退出

if id $userName &> /dev/null && [ "$answer" == "yes" ];then

    …

fi

練習:給定一個用戶,如果其shell為/bin/bash,且其id號大于等于500,則說明這是一個可登陸普通用戶,否則,顯示其為非登陸用戶或管理員

blob.png

寫腳本:

1、查看傳遞參數個數

2、判斷參數類型等

3、邏輯等

練習:

如果某用戶不存在,則添加之

blob.png

練習:

1、添加10個用戶,如果用戶不存在,則添加,如果存在就顯示已經有此用戶

2、顯示一共添加了多少個用戶

blob.png

練習:

1、添加10個用戶,如果用戶不存在,則添加并以綠色顯示添加成功,如果存在就顯示已經有此用戶并以紅色顯示

2、顯示一共添加了多少個用戶

blob.png

blob.png

文件測試:

-a file:文件存在則為真

-e file:文件存在則為真

以上兩者可能是文件、目錄、鏈接

-f file:文件存在并且是普通文件則為真

-d file:存在并且為目錄文件則為真

-h/L file:存在并且為符號鏈接則為真

-b file:存在并且為塊設備則為真

-c file:存在并且為字符設備則為真

-S file:存在并且為套接字則為真

-p file:存在并且為管道則為真

-s file:存在并且為非空文件則為真

-r file:存在并且可讀則為真

-w file:存在并且可寫則為真

-x file:存在并且可執行則為真

-N file:存在并且mtime比atime新

file1 -nt file2:file1比file2新則為真

file1 -ot file2:file1比file2舊則為真

file1 -ef file2:file1比file2新則為真

練習:如果wget命令對應的可執行文件存在且可執行,則使用它下載http://172.16.0.1/centos6.5.repo至當前目錄中

blob.png

練習:給定一個文件路徑,判斷此文件是否存在,不存在則說明文件不存在直接結束腳本;如果文件是一個普通文件,則顯示為“regular file”,如果文件是目錄,則顯示為“directory”,如果文件是鏈接文件,則顯示為“symbolic file”,否則顯示為“unknown”

blob.png

blob.png

練習:腳本完成以下任務

1、分別復制/var/log下的文件至/tmp/logs目錄

2、復制目錄時,才使用cp -r

3、復制文件,使用cp

4、復制鏈接,使用cp -d

5、余下的類型,使用cp -a

寫一個腳本,完成如下任務,其使用形式如下所示:

script.sh {start|stop|restart|status}

其中:

如果參數為空,則顯示幫助信息,并退出腳本;

如果參數為start,則創建空文件/var/lock/subsys/script,并顯示“starting script successfully.”

如果參數為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script successfully.”

如果參數為restart,則刪除文件/var/locksubsys/script并重新創建,而后顯示“Restarting script successfully.”

如果參數為status,那么:

如果文件/var/lock/subsys/script存在,則顯示“Script is running…”,否則,則顯示“Script is stopped.”

說明:script.sh是腳本文件名,在創建時,其名稱可以自己隨意定義,但如果其名稱發生變量,上/var/lock/sussys/下的文件名也要隨之而變;

交互編程:

read

    -p:"提示"

    -t:超時

blob.png

blob.png

例子:顯示一個如下菜單給用戶:

cpu) show cpu infomation

mem) show memory infomation

*) quit

1、如果用戶選擇了cpu,則顯示/proc/cpuinfo文件的內容;

2、如果用戶選擇了mem,則顯示/proc/meminfo文件的內容;

3、退出

blob.png

blob.png

或者

blob.png

blob.png

生成菜單第二種方法更易用

字符串中的模式匹配:

=~:模式匹配

用法:[[ "$var" =~ pattern ]]

blob.png

例如:讓用戶給定一個用戶名,判斷其是否擁有可登錄shell;

blob.png

blob.png

blob.png

練習:寫一個腳本,完成如下功能

使用格式:

script.sh  /path/to/somefile

1、可接受一個文件路徑參數:

如果此文件不存在,則創建之,則自動為其生成前n行類似如下:

#!/bin/bash

# description:

# version:

# date:

# author: mageedu

# license: GPL

而后使用vim打開此文件,并讓光標處在最后一行的行首

如果文件存在、且是bash腳本,則使用vim打開之,光標自動處行最后一行的行首;

否則,退出;

如果正常編輯保存,

判斷,如果文件沒有執行權限,則添加之;

判斷,其是否有語法錯誤,如果有,提示;

while和until循環:

for循環劣勢:

    1、先要在內存中生成列表,如果列表很大,就很占內存

    2、循環次數不定,無法適合這種場景

while適用于循環次數位置或不便用for直接生成較大的列表時

格式:

1、次數已知

while 測試條件;do

    循環體

done

如果測試條件為真,則進入循環;退出條件為,測試條件為假

declare -i count=1

while $count <= 100;do

    循環體

    let count++

done

until:

until 測試條件;do

    循環體

done

如果測試條件結果為假,則進入循環,退出條件為,測試條件為真

練習:求100以內所有正整數之和

blob.png

blob.png

練習:求100以內所有偶數之和,使用取模方式實現

blob.png

練習:提示用戶輸入一個用戶名,如果用戶存在,就顯示用戶的id號或shell,否則顯示用戶不存在,顯示完成之后不退出,再次重復前面的操作,直到用戶輸入q或quit為止

blob.png

blob.png

2、

循環高級:

for的第二種使用格式:

for ((初始條件;測試條件;修改表達式));do

    循環體

done

練習:求100以內所有正整數之和

while的實現方式:

#!/bin/bash

declare -i count=1

declare -i sum=0

while [ $count -lt 100 ];do

    let sum+=$count

    let count++

done

echo $sum

for的實現方式:

#!/bin/bash

declare -i sum=0

for ((count=1;$count <= 100;count++));do

    let sum+=$count

done

echo $sum

變量在賦值時都不用加$,在比較時需要加

練習:求100以內所有偶數之和

#!/bin/bash

declare -i sum=0

for ((count=2;$count <= 100;count+=2));do

    let sum+=$count

done

echo $sum

while循環:遍歷文本文件

格式:

while read i;do

    echo $i

done < file

練習:顯示id號為偶數的用戶的用戶名、id、shell

blob.png

blob.png

練習:顯示id號為偶數,且id號同gid的用戶的用戶名、id、shell

blob.png

blob.png

練習:顯示當前系統上所有掛載的文件系統中空間使用百分比大于10的文件系統

bash編程至case

寫一個腳本,使用格式:

1、start:創建/var/lock/subsys/script.sh

2、stop:刪除此文件

3、restart:先刪除文件,再創建文件

4、status:如果文件存在,顯示running,否則顯示stopped

blob.png

blob.png

blob.png

blob.png

case語句:有多個測試條件時,case語句會使得語法結構更明晰

case 變量引用 in

pattern1)

    分支1

    ;;

pattern2)

    分支2

    ;;

*)

    分支n

esac

pattern:類同于文件名通配機制,但支持使用|表示或者

a|b:a或b

*:匹配任意長度的任意字符

?:匹配任意單個字符

[]:指定范圍內的任意單個字符

練習:用戶鍵入字符后判斷其所屬的類別

blob.png

blob.png

練習:寫一個腳本,對/etc/目錄及內部的所有文件打包壓縮

1、顯示一個菜單,讓用戶選擇使用的壓縮工具

xz)xz compress tool

gz)gzip compress tool

bz2)bzip2 compress tool

2、根據用戶選擇的工具,對/etc/執行相應的操作并保存至/backups目錄,文件形如/backups/etc-日期時間.tar.壓縮后綴

blob.png

blob.png

blob.png

練習:寫一個腳本,使用形式如下

showifinfo.sh [-i interface|-a] [-v]

要求:

1、-i或-a不可同時使用,-i用于指定特定網卡接口,-a用于指定所有接口

顯示接口的ip地址

2、使用-v,則表示顯示詳細信息

顯示接口的ip地址、子網掩碼、廣播地址

3、默認表示僅使用-a選項

blob.png

blob.png

blob.png

    

原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/47622

(0)
黑白子黑白子
上一篇 2016-09-25
下一篇 2016-09-25

相關推薦

  • 基于ansible自動部署keepalived+nginx來調度amp

    實戰作業: (1) 主/備模型的keepalived+nginx (2) httpd+php+php-mysql (3) mysql-server或mariadb-server         擁有testdb庫,并允許testuser對其擁有所有權限 實驗環境: 主機1:10.…

    Linux干貨 2016-11-07
  • grep的用法

    grep的用法 1、復制/etc/skel目錄為/home/tuser1及其內容文件的屬組和其它用戶均沒有任何訪問權限。 cp -R /etc/skel /home/thuser1 #復制文件/etc/skel 到/home/目錄下并改名為thuser1 chmod -R 700 /home/thuser1 #更改/home/thuser1目錄權限為屬主全部…

    Linux干貨 2017-07-23
  • Linux系統文本處理

                                           Linux系統文本處理工具        …

    Linux干貨 2016-08-15
  • 進程,自動化任務與安全

    進程     進程就是一段存儲了一個指令集的內存空間    相關命令:        pstree:顯示當前運行的進程樹,按樹狀結構顯示     &n…

    Linux干貨 2017-04-02
  • vsftpd

    文件服務: 安裝開啟服務前先關閉selinux,清空iptables策略。避免不必要的麻煩,服務開啟后,配置一切正常有需要再根據情況開啟。 ftp:應用層,C/S,跨主機的文件共享服務;file transfer protocol nfs,cifs:文件系統接口,網絡文件系統;     nfs:network&nbsp…

    Linux干貨 2016-11-01
  • shell腳本基礎

    shell腳本編程基礎 1、基本格式 首先在編寫shell的開始要聲明一下該shell所用的腳本類型,我們也稱為shebang機制 eg: #!/bin/bash # Description … 2、bash中的變量的種類 (1)、本地變量 生效范圍: 當前shell進程,對當前shell之外的進程及子進程均無效 (2)、環境變量 生效范圍: 當前she…

    Linux干貨 2017-08-04
欧美性久久久久