Linux Bash基礎(二)

主要內容:bash

  • 邏輯判斷:test關鍵字app

  • 選擇結構:if-else, caseide

  • 循環結構:while-do, for

邏輯判斷code

bash不只能夠進行數值運算,經過test關鍵字還能夠進行邏輯判斷。blog

數值大小的判斷字符串

例如判斷3是否大於2的大小:it

test 3 -gt 2; echo $?
0

注意:判斷成立,返回0,不成立返回1。io

Linux Bash基礎(二)

文本字符串的判斷class

例如判斷兩文本是否相等:test

test abc = abx; echo $?
1

由於判斷不成立,因此返回1。

另外注意:等號的兩側要有空格,不然就變成變量賦值了!

Linux Bash基礎(二)

文件的判斷

例如判斷文件是否存在:

test -e a.out; echo $?

Linux Bash基礎(二)

選擇結構

if-else

類比C語言中的if else-if else結構,注意結尾是fi,即if反過來寫。

if condition1
then
    command1
elif condition2
then 
    command2
else
    commandN
fi

例如,demo_if.sh內容以下:

#!/bin/bash

var=`whoami`
if test $var = "root"
then 
    echo "You are root"
else
    echo "$var, You are not root"
fi

case

類比C語言中的switch-case結構,注意,break被;;取代,結尾是esac,即case反過來寫。

case 值 in
模式1)
    command1
    command2
    ;;
模式2)
    command1
    command2
    ;;  
esac

例如,demo_case.sh代碼以下:

#!/bin/bash

var=`whoami`
echo "You are $var"

case $var in
root)
    echo "You are God."
    ;;
deeplearning)
    echo "You are a happy user."
    ;;
*)
    echo "You are the others."
    ;;
esac

注意:文本標籤除了是一串具體的文本,還能夠包含通配符,如;

Linux Bash基礎(二)

循環結構

while

類比C語言中的while-do結構,注意以done結尾。

例如demo_while.sh代碼以下(注意符號+以前有一個空格!):

#!/bin/bash

now=`date +'%Y%m%d%H%M'`
deadline=`date --date='30 second' +'%Y%m%d%H%M'`

while test $now -lt $deadline
do
    date
    echo "not yet"
    sleep 10
    now=`date +'%Y%m%d%H%M'`
done

echo "now, deadline reached"
2019年 11月 11日 星期一 15:07:31 CST
not yet
2019年 11月 11日 星期一 15:07:41 CST
not yet
2019年 11月 11日 星期一 15:07:51 CST
not yet
now, deadline reache

for

類比C語言中的for結構,注意也是以done結尾。

例如demo_for.sh代碼以下:

#!/bin/bash

for var in `ls log*`
do
    rm $var
done

該腳本的功能是查找本目錄中以「log」開頭的文件,並將其依次刪除。

另外,結合seq關鍵字,能夠控制循環次數,好比:

seq 1 2 10
1
3
5
7
9

應用舉例

  1. 高斯求和,計算1到100全部整數的加和:

#!/bin/bash

total=0
for number in seq 1 1 100
do
total=$(($total+$number))
done

echo $total

 
 

5050

也能夠用while-do結構:

#!/bin/bash

total=0
num=1
while :
do
if test $num -gt 100
then
break
fi
total=$(($total+$num))
num=$(($num+1))
done

echo $total

計算1到100全部不被3整除的數的和,使用**continue語句**:

#!/bin/bash

total=0
for num in seq 1 1 100
do
if test $((${num}%3)) -eq 0
then
continue
fi
total=$(($total+$num))
done

echo $total

 
 

3367

相關文章
相關標籤/搜索