Linux shell 指令碼(二)

來源:互聯網
上載者:User

標籤:linux shell   shell 指令碼   shell   

五、字串處理1.子串截取操作:
路徑分割:
 dirname命令:定位目標所在檔案夾的位置 
 basename命令:目標對象的名字,通常指的指的是檔案名稱或者最底層的目錄名
使用expr命令
  格式:expr substr $Var1 起始位置 截取長度
使用${}運算式
  格式:${Var1:起始位置:截取長度}
 
例子:
1.
Var="/etc/httpd/conf/httpd.conf"
dirname $Var 
etc/httpd/conf 

basename $Var
httpd.conf 

2.
Var=hsdzwmoon
expr substr $Var 4 6   #編號從1開始
zwmoon

3.
Var=hsdzwmoon
echo ${Var:4:6}   #編號從0開始
wmoon

echo ${var::5} #從開頭開始截取 可以省略起始位置的書寫
hsdzw      

2.字串替換
使用${}運算式
  格式1:${var/old/new}   #將變數裡第一個old替換成new
  格式2:${var//old/new}   #將變數裡所有old替換成new
例子:
1.
Var=hsdzwmoon
echo ${Var/o/l}   
hsdzwmlon

echo ${var//o/l}
hsdzwmlln

3.使用隨機字串
如何擷取隨機字串?
linux 裡沒有可以擷取隨機字串的變數
可以通過如下方式獲得:
/dev/urandom  #裝置檔案,隨機字元  亂碼的
   |
/usr/bin/md5sum #校正和  產生ASCII碼
   | 
/bin/cut       #格式處理,截取我們需要保留的部分

隨機字元->ASCII 字元
head -1  /dev/urandom |md5sum   #head -1 第一行隨機字元
使用cut切割字串
echo $var |cut -b  起始位置-結束位置  #位置為首、尾時可省略
例子:
1.
如:



六、條件測試1.測試操作規範:
測試的本質:
  是一條操作命令,根據$?返回值來判斷條件是否成立
操作規範:
    格式1:test 條件運算式
格式2:[條件運算式]
測試操作的練習方法:
 直接跟&&echo YES 判斷結果
  用法:[條件運算式] && echo YES
例子:
1.如:



2.檔案狀態的檢測:
2.1 存在及識別:
  -e:目標是否存在
  -d:是否為目錄
  -f:是否為檔案
例子:
1.如:


2.2 許可權的檢測:
-r:是否有讀取許可權
-w:是否有寫入許可權

-x:是否有可執行許可權

例子:
1.如:


[ -x "/etc/shadow" ] && echo YES
[ -r "/etc/shadow" ] && echo YES
YES 

特殊情況:
root 使用者下:
ls -l  /etc/shadow
-r-------- 1 root root 1386 04-16 18:58 /etc/shdow
[ -w "/etc/shadow" ] && echo YES  #root下我們可以看到沒有寫入權限,但是輸出為YES,這裡要注意:所有者W例外 
YES                         


整數值比較、子串匹配
整數值比較:
  -eq:等於
  -ne:不等於
  -gt:大於
  -lt:小於
  -ge:大於或等於
  -le:小於或等於
  
例子:
who | wc -l #統計登陸使用者數



字串匹配:
  =:兩個字串相同
 !=:兩個字串不相同
 
 例子:
 1.如:



七、使用if判斷結構程式流量控制:
執行過程的順序化、自動化
  希望指令碼智能化的選擇與處理
    讓重複操作更聰明一些
對於...多個對象...如何逐個來處理? for
在...取值是...的情況下怎麼辦?  case
如果...條件是...時程式需要做什嗎? if


1.單分支if語句結構
  if 條件測試 
     then 命令序列      #只關注條件成立的情況
  fi                 


例子:
  單分支if應用樣本:
    檢查備份目錄/opt/mrepo,若不存在則建立
cat chkdir.sh 
#!/bin/bash
BACKUP_DIR="/opt/mrepo"
if [ ! -d $BACKUP_DIR ]
then 
  mkdir -p $BACKUP_DIR
fi


2.雙分支if語句結構
if 條件測試
   then  命令序列1
   else 命令序列2
fi 


例子: 
雙分支if應用樣本:
  判斷目標主機是否存活,顯示檢測結果
  
cat chkhost.sh


#!/bin/bash 
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if[ $? -eq 0 ]
then 
  echo "Host $1 is up."
else
  echo ”Host $1 is down“
fi


./chkhost.sh   192.168.4.11
Host  192.168.4.11  is up


./chkhost.sh  192.168.4.13
Host 192.168.4.13 is down


3.多分支if語句結構
  if 條件測試1
    then 命令序列1
  elif 條件測試2 
    then 命令序列2  
  else
    命令序列n
  fi
  
 例子:
 多分支if應用樣本
   判斷機試分數,區分優秀/合格/不合格
  
cat gradediv.sh
#!/bin/bash
read -p "請輸入你的分數(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then
   echo "$GRADE 分!優秀"
elif [ $GRADE -ge 70 ]&&[ $GRADE -le 84 ];then
   echo "$GRADE分,合格"
else
   echo "$GRADE 分?不合格"
fi


結果如:


八、使用for迴圈for 變數名 in 取值列表
do 
   命令序列
done


for IP地址 in 主機地址清單
do
  檢查狀態
done


例子:
1.依次輸出 1st. 2nd. 3rd.
#!/bin/bash


for i in "1st." "2nd." "3rd."
do
  echo $i
done


結果如:


2.逐詞輸出/etc/host.conf 檔案內容


#!/bin/bash
for i in $(cat /etc/host.conf)
do 
  echo $i
done 

結果如:



實戰案例:
目標:批量加使用者帳號:
  使用者列表檔案users.txt ,每行一個
  將初始口令設為123456,首次登陸後必須更改

cat uad.sh 
#!/bin/bash
for i in $(cat /root/users.txt)
do
   useradd $i
   echo "123456" | passwd --stdin $i 
   chage -d 0 $i 
done 
結果如:


   
2.檢測一個IP範圍的主機狀態
   192.168.4.1 -192.168.10
   根據是否ping通來判斷
 
cat chkping.sh
#!/bin/bash
IP_PRE="192.168.4."
for IP in $(seq 1 5)
do 
ping -c 3 -i 0.2 -W 3 ${IP_PRE}$IP &>/dev/null
if[ $? -eq 0 ];then  
  echo "${IP_PRE}$IP is up."
else
  echo ”${IP_PRE}$IP is down“
 fi
done


./chkping.sh
192.168.4.1 is down
192.168.4.2 is up 
192.168.4.3 is down 
192.168.4.4 is down 
......

Linux shell 指令碼(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.