shell訓練計畫30天之第七天

2021-09-26 07:31:09 字數 2852 閱讀 3054

一、if判斷檔案、目錄屬性

[ -f file ] 判斷是否是普通檔案,且存在

#!/bin/bash f="/tmp/aminglinux" if [ -f $f ] then echo $f exist else touch $f fi

[ -d file ] 判斷是否是目錄,且存在

#!/bin/bash f="/tmp/aminglinux" if [ -d $f ] then echo $f exist else touch $f fi

[ -e file ] 判斷檔案或目錄是否存在

#!/bin/bash f="/tmp/aminglinux" if [ -e $f ] then echo $f exist else touch $f fi

[ -r file ] 判斷檔案是否可讀

#!/bin/bash f="/tmp/aminglinux" if [ -e $f ] then echo $f readable fi

[ -w file ] 判斷檔案是否可寫

#!/bin/bash f="/tmp/aminglinux" if [ -e $f ] then echo $f writeable fi

[ -x file ] 判斷檔案是否可執行

#!/bin/bash f="/tmp/aminglinux" if [ -e $f ] then echo $f exeable fi

指令碼改良

#!/bin/bash

f=" /tmp/aminglinux"

[ -f $f] && rm -f $f

等同於if [ -f $f ]

then

rm -f $f

fi&& 如果判斷條件成立則執行

|| 如果判斷條件不成立則執行

[ ! -f $f] && rm -f $f 加感嘆號表示取反,判斷檔案是否不存在

二、if的一些特殊用法

if [ -z "$a" ] 表示當變數a的值為空時,做什麼處理

if [ -n "$a"] 表示當變數a的值不為空

if ! grep -wq 'user1' /etc/passwd;then useradd user1 ; fi 判斷是否存在user1使用者,如

果不存在就建立

使用-z 或者是-n 後面的變數必須加雙引號

if grep -q '123' 1.txt ;then 表示如果1.txt中含有『123』的行時會做什麼處理

if [ ! -e file ];then 表示檔案不存在時會怎麼樣

if (($a<1)); then 等同於 if [$a -lt 1]; then

中不能使用<,>,==,!=,>=,<=這類的符號

指令碼中變數需要使用雙引號,檔案不需要雙引號

grep -wq 過濾單詞並不列印出來

-w過濾單詞

-q 不列印過濾的 內容

三、case判斷

在 case中可以使用或即|

1.格式

value1)

command

value2)

command

command

ease

2.例子

#!/bin/bash

read -p "please input a number :" n 等待使用者輸入 read -p

if [ -z $n ] 檢測變數是否為空,即使用者是否輸入內容

then

echo "pleas input a number." 當變數為空時輸出

exit 1

fin1=`echo $n|sed 's/[0-9]//g'` 使用sed清空$n中的數字

if [ ! -z $n1 ] 若變數為不空則輸出提示,證明使用者輸入了除了

數字以外的內容

theecho "please input a number."

exit 1

fi 判斷數字的大小,返回標記值

if [ $n -lt 60 ] && [ $n -ge 0 ]

then

tag=1

elif [ $n -ge 60 ] && [ $n -lt 80 ]

then

tag=2

elif [ $n -ge 80 ] && [ $n -lt 100]

then

tag=3

elif [ $n -ge 90 ] && [ $n -le 100 ]

then

tag=4

else

tag=0

ficase $tag in

1)echo "not ok "

2)echo " ok "

3)echo "ok ok"

4)echo " oook"

echo "the number range is 0-100"

四、for迴圈

1.語法:for 變數名 in 條件 ; do 。。。;done

2.例子

#!/bin/bash

sum=0

for i in `seq 1 100`

dosum=$[$sum+$i]

echo $i

done

echo $sun

#!/bin/bash

cd /etc/

for a in `ls /etc/`

doif [ -d $a ]

then

echo $a

ls $a

fidone

for i in `seq 1 3` ; do echo $i ;done

for i in `ls ./` ; do echo $1 ;done

for迴圈的時候會以空格或者回車為分隔符,要特別注意

shell訓練計畫30天之第六天

一 什麼是shell 1.shell是一種程式語言 2.shell可以使用邏輯判斷和迴圈等語法 3.shell支援自定義函式 4.shell是系統命令的集合 5.shell指令碼可以實現自動化運維,可以大大增加運維的效率 6.shell其實就是把系統的命令寫進檔案中,有點類似於windows的批處理...

shell訓練計畫30天之第一天

一 什麼是shell 1.是命令直譯器 2.支援特定的語法 邏輯判斷 迴圈 3.每個使用者可以有自己特定的shell 4.centos7預設shell為bash bourne agin shell 5.其他的shell zsh ksh 二 命令歷史 1.按向上方向鍵檢視歷史命令 2.歷史命令檔案存在...

shell訓練計畫30天之第十九天

例36 乙個數字的行 要求 用shell實現,把乙個文件中只有乙個數字的行給列印出來 要點 用sed替換所有非數字的字元為空的,剩下的就是數字 bin bash while read line don echo line sed s 0 9 g wc l if n eq 1 then echo li...