?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 20:13
下一篇 2016-09-25 23:48

相關推薦

  • 初識Linux-即使是997也不能停止學習

    1.計算機的組成及其功能:    從1946年第一臺通用計算機ENIAC誕生至今,幾乎所有的計算機系統都是建立在馮諾依曼體系結構上的。那么何為馮諾依曼體系結構? 馮諾依曼體系結構:        控制器:是整個計算機的中樞,負責計算機的整體調度工作,將指令從存儲器中取出,并對指令進行解釋執行。 &n…

    Linux干貨 2016-10-29
  • 設計模式(四)原型模式Prototype(創建型)

    1.   概述 我們都知道,創建型模式一般是用來創建一個新的對象,然后我們使用這個對象完成一些對象的操作,我們通過原型模式可以快速的創建一個對象而不需要提供專門的new()操作就可以快速完成對象的創建,這無疑是一種非常有效的方式,快速的創建一個新的對象。 例子1:孫悟空拔下一嘬猴毛,輕輕一吹就會變出好多的孫悟空來。 例子2:寄個快遞下面是一個郵寄快…

    Linux干貨 2015-06-25
  • 魔術方法 反射

    魔術方法 反射 反射(reflection):指的是運行時獲取類型定義信息。一個對象能夠在運行時像照鏡子一樣反射出其類型信息;也就是說能夠通過一個對象,找到自己的type、class、attribute、或method的能力,稱為反射或者自省。 具有反射能力的函數:type、isinstance、callable、dir、getattr。 運行時和編譯時不同…

    Linux干貨 2017-11-30
  • openssl基本應用

    導言: 我們知道在互聯網上進行文件傳輸、電子郵件商務往來存在許多不安全因素,特別是對于一些大公司和一些機密文件在網絡上傳輸,所以為了保證安全,我們必須給文件加密。今天,我們就來談談加密、解密、openssl的使用以及CA的實現過程。 數據的3大加密方式 對稱加密 含義 指加密解密使用同一組密鑰,是按數據分塊以后進行加密的,前后數據塊彼此之間有關聯關系。 特性…

    Linux干貨 2016-12-05
  • 推薦-自動化運維之puppet小試牛刀

     一、puppet介紹       puppet是IT基礎設施自動化管理工具,“她”能夠幫助系統管理員管理基礎設施的整個生命周期:供應(provisioning、配置(configuration)、聯動(orchestration)及報告(reporting)。    …

    Linux干貨 2016-04-05
  • shell編程的常見實例

    1. 寫一個腳本/root/bin/argsnum.sh 用戶輸入一個文件路徑并查找文件中空白行的個數 ,如果用戶沒有輸入路徑則自動退出  實驗結果如下: 如果不輸入任何路徑程序會自動退出:實驗結果如下: 用其他方法驗證是不是有兩行空行: (個人總結): 1.   read 命令,如果用 -p 來做提示信息,則不支持\n換行,這…

    Linux干貨 2016-08-12
欧美性久久久久