shell指令碼11彈

2021-10-04 07:19:33 字數 3640 閱讀 7295

shell指令碼程式設計 變數補充 if條件判斷

變數的型別:字串 數值 布林型別:true false null

shell中指定變數的型別 :declare

declesar:內建命令

用來宣告和修改變數的屬性(唯讀–readonly—r)

設定為唯讀變數:#declare -r a=10 r //不能修改,包括不能刪除

設定為數值變數:#declare -i 變數名 r //只能儲存數值 不能為小數。

如果存在小數,只保留整數

不能存字串型別,字串顯示為0

檢視變數的屬性和值:#declare -p 變數名

//輸出結果為:declare -i a=「10」

陣列:乙個變數對應乙個值:a=10

乙個變數對應多個值:linux=(centos debain suse redhat)

檢視陣列的值:#echo $ //從前往後數從0來是計數

//從後往前是從-1開始計數

顯示陣列中所有內容:#echo $

從已有的陣列中新增:#linux[4]=febora

//不能跳過陣列下標去新增陣列的值,會出現為空的情況

if條件判斷:

語法結構:if + 命令或者判斷語句

then 執行語句

fiif pwd

then

echo 「nihao」

fi/root

nihao //執行了if中pwd的命令,由於狀態碼為0,有執行了then中的語句

if條件判斷乙個使用者是否正在當前系統上使用,如果是 顯示在使用並列出此使用者的家目錄資訊

#vim text.sh

#!/bin/bash

# useradd fengqy

# /etc/passwd

username=fqy

if       grep   $username      /etc/passwd

then

echo "ok"

ls -a /home/$username/*

fi

公升級指令碼:使用者從鍵盤輸入使用者的名字,然後進行查詢:

#!/bin/bash

read -p "please input your username:"username

if grep use

rnam

e/et

c/pa

sswd

then

echo

"ok"

ls−a

/hom

e/

username /etc/passwd then echo "ok" ls -a /home/

userna

me/e

tc/p

assw

dthe

nech

o"ok

"ls−

a/ho

me/username/

fi#shell指令碼程式設計 if分支語句 多分支

#useradd //建立乙個使用者

//使用者資訊會寫到/etc/passwd

//同時會生成以此使用者名稱命令的家目錄 在/home建立

從鍵盤讀取使用者輸入的密碼資訊,驗證輸入的密碼是否為123456,如果輸入正確,

顯示密碼正確 ,如果錯誤,顯示密碼錯誤

#ssh ip位址

#vim passwd.sh

#!/bin/bash

read -p 「請輸入密碼:」 passwd

if test $passwd = 「123456」 //字串建議用雙引號引起來

if [ $passwd = 「123456」 ] /

/用中括號寫測試語句

then

echo 「passwd is ok」

else

echo 「密碼輸入錯誤」

fi解決輸入的密碼資訊和已有的資訊做匹配的問題:

使用test測試:檔案屬性測試 字串測試 算數測試

命令格式:test 測試語句 [ 測試語句 ] //括號兩邊要有空格

檔案屬性測試:

-e------檔案存在為真

-f-------檔案存在為真且是乙個常規為真

-d--------檔案存在為真且是乙個目錄

-c-----------檔案存在且特殊字元檔案為真

-b-------檔案存在且特殊快為真

-g-------檔案存在且設定了sgid位為真

-u------檔案存在且設定了ugid為真

-r------檔案存在且可讀為真

-w----檔案存在且可寫為真

-x------檔案存在且可執行為真

-s-----檔案存在且不為空為真

邏輯與和邏輯或:

&&*****邏輯與

|| *****邏輯或

true為真 false為假 true && false --> false

當第乙個條件為true,返回第二個條件 false

當第乙個條件為false時,返回第乙個條件

當乙個條件為true時,返回第二個條件

//兩者為真 結果為真

//有乙個為假,結果為假

true為真 false為假 true || false --> true

//兩者為假,結果為假

//有乙個為真,結果為真

字串測試:

-z---- 為空為真

-n ----不為空為真

=---- 相同為真

!=---- 不相同為真

<----字典排名在前為真

----字典排名在後為真

算數測試操作:

-eq 等於

-ne 不等於

-gt 大於

-ge 大於等於

-lt 小於

-le 小於等於

雙分支:

if 測試的語句或命令

then

執行語句

fi多分支:

if 測試語句或命令

then

執行語句1

elif

執行語句2

elif

執行語句3

elif

執行語句4

else

執行語句5

fi指令碼示例:

判斷使用者輸入的數值是正數還是負數:

知識點:

算數操作測試

知識點:ping命令

ping測試成功 $?返回值為0

選項:-c 3 //傳送三個測試包

-i 0.2 //傳送測試包的間隔時間

-w 3 //反饋超時時間

#!/bin/bash

read -p 「請輸入要測試的ip:」 ip

ping -c 3 -i 0.2 -w 3 $ip > /dev/null

if [ ?−e

q0];

then

echo

"? -eq 0 ] ;then echo "

?−eq0]

;the

nech

o"ip host is up"

else

echo 「$ip host is down」

fi/dev/null //黑洞檔案

shell指令碼十二彈

1.使用正則處理條件 輸出以bash結尾的完整記錄 輸出整行 awk f bash etc passwd 輸出包含root的行 awk f root etc passwd print可以不寫 輸出root或者he賬號的使用者名稱和uid資訊 awk f root tom 輸出賬戶的名稱包含root的...

shell 指令碼第五彈

1.shell指令碼程式設計 1.指令碼是 c語言 程式設計 shell 指令碼 只作用於linux作業系統 以間隔多行命令 2.功能 批量處理檔案 自動去做某些功能 date,who,ls 處理日誌資訊 備份 刪除原日誌 上傳備份檔案 週期性計畫任務 3.學習方法 linux的命令 lamp we...

shell指令碼第六彈

shell中的函式 變數 條件 迴圈 函式 陣列 awk function 函式 語法格式 函式名 function name function name 向函式中傳遞引數 位置變數 0 表示當前指令碼的檔名 表示多少個引數 表示所有的位置引數 1 表示第乙個引數 2 表示第二個引數 定義乙個函式例...