Linux Shell筆記之結構迴圈
阿新 • • 發佈:2019-01-06
一、條件語句
1.if—then
#!/bin/bash
if date 如果命令執行成功(退出碼為0),則then部分的命令被執行
then
echo "good"
fi
2.if—then—else
#!/bin/bash
if hunter
then
echo "good"
else
echo "bad" if語句中退出碼非0,則執行else部分語句
fi
3.elif
#!/bin/bash
if hunter
then
echo "command not found"
elif date 多重If判斷
then
echo "date"
fi
4.test命令 與其它程式語言思維一樣的方式
#!/bin/bash
if test 1 -eq 2 test命令列出條件成立則退出並返回狀態碼0,命令等同if [ 1 -eq 2]
then
echo "right"
else
echo "wrong"
fi
5.條件比較
1)資料比較
n1 -eq n2 相等
n1 -ge n2 大於或等於
n1 -gt n2 大於
n1 -le n2 小於等於
n1 -lt n2 小於
n1 -ne n2 不等於
2)字串比較
str1 = str2
str1 != str2
str1 < str2
str1 > str2
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否為0
#!/bin/bash
str1=good
str2=wrong
if [ $str1 \> $str2 ] 大於號需要轉義,否則指令碼會當重定向符號
then echo "$str1 is greater than $str2"
else
echo "$str1 is less than $str2"
fi
#!/bin/bash
str=
if [ -z "$str" ] 判斷字串是否為空,空的或未初始化的變數對Shell指令碼很致命
then
echo "empty"
else
echo "not empty"
fi
3)檔案比較
-d file 檢查檔案是否存在且為目錄
-e file 檢查檔案是否存在
-f file 檢查檔案是否存在且為檔案
-r file 檢查檔案是否存在且可讀
-s file 檢查檔案是否存在且非空
-w file 檢查檔案是否存在且可寫
-x file 檢查檔案是否存在且可執行
-O file 檢查檔案是否存在且屬當前使用者
-G file 檢查檔案是否存在且預設組與當前使用者相同
file1 -nt file2 檢查file1是否新於file2
file1 -ot file2 檢查file1是否舊於file2
4)複合條件&&與、||或
#!/bin/bash
if [ -e str ] && [ -f zero ]
then
echo "file all exist"
fi
5)雙圓括號
#!/bin/bash
str1=good
str2=wrong
if (( $str1 > $str2 )) 雙圓括號中表達式裡的大於號不用轉義
then echo "$str1 is greater than $str2"
else
echo "$str1 is less than $str2"
fi
6)雙方括號
#!/bin/bash
if [[ $USER == r* ]] 支援萬用字元模式
then
echo "welcome root user"
else
echo "sorry"
fi
7)case分支
#!/bin/bash
case $USER in
root|hunterno4)
echo "welcome root user";; 尾部兩個分號
mysql)
echo "welcome to database";;
surfftp)
echo "nice to meet you";;
*) 都不匹配時的default語句
echo "i don't know you";;
esac
二、迴圈語句
1.for命令
1)for迴圈
#!/bin/bash
for command in `ls /bin` for迴圈預設每個值以空格來分割
do
echo "command in /bin is $command"
done
#!/bin/bash
for file in /usr/local/program/package/*
do
if [ -d "$file" ] 檔案用引號圈起,以避免檔案含空格等情況
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
2)欄位分隔符
#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n' 修改IFS分隔符為換行符,也可同時賦值為:;"等等
for str in `cat /home/hunterno4/passwd`
do
echo "str in passwd is $str"
done
IFS=$IFS.OLD 恢復IFS分隔符預設值
3)C語言風格的for迴圈
#!/bin/bash
for ((i = 0;i<5 ;i++)) 此時變數與值間可以有空格,變數不用加$號
do
echo "current number is $i"
done
2.while命令
#!/bin/bash
i=5
while [ $i -gt 0 ]
do
echo $i
i=$[ $i-1 ]
done
3.巢狀迴圈
#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n'
for row in `cat /etc/passwd`
do
echo "passwd row in $row ———"
IFS=$':'
for words in $row
do
echo " $words"
done
done
IFS=$IFS.OLD
4.迴圈控制
1)break
#!/bin/bash
i=5
while [ $i -gt 0 ]
do
echo $i
i=$[ $i-1 ]
if [ $i -eq 3 ]
then
break 自動終止最裡面的迴圈,break n,終止n層迴圈
fi
done
2)continue
#!/bin/bash
i=10
while [ $i -gt 0 ]
do
i=$[ $i-1 ]
if [ $i -gt 3 ] && [ $i -lt 6 ]
then
continue continue n則指定繼續執行哪級迴圈
fi
echo "$i"
done > output.txt 將迴圈過程中的結果重定向輸出到檔案
1.if—then
#!/bin/bash
if date 如果命令執行成功(退出碼為0),則then部分的命令被執行
then
echo "good"
fi
2.if—then—else
#!/bin/bash
if hunter
then
echo "good"
else
echo "bad" if語句中退出碼非0,則執行else部分語句
fi
3.elif
#!/bin/bash
if hunter
then
echo "command not found"
elif date 多重If判斷
then
echo "date"
fi
4.test命令 與其它程式語言思維一樣的方式
#!/bin/bash
if test 1 -eq 2 test命令列出條件成立則退出並返回狀態碼0,命令等同if [ 1 -eq 2]
then
echo "right"
else
echo "wrong"
fi
5.條件比較
1)資料比較
n1 -eq n2 相等
n1 -ge n2 大於或等於
n1 -gt n2 大於
n1 -le n2 小於等於
n1 -lt n2 小於
n1 -ne n2 不等於
2)字串比較
str1 = str2
str1 != str2
str1 < str2
str1 > str2
-n str1 檢查str1的長度是否非0
-z str1 檢查str1的長度是否為0
#!/bin/bash
str1=good
str2=wrong
if [ $str1 \> $str2 ] 大於號需要轉義,否則指令碼會當重定向符號
then echo "$str1 is greater than $str2"
else
echo "$str1 is less than $str2"
fi
#!/bin/bash
str=
if [ -z "$str" ] 判斷字串是否為空,空的或未初始化的變數對Shell指令碼很致命
then
echo "empty"
else
echo "not empty"
fi
3)檔案比較
-d file 檢查檔案是否存在且為目錄
-e file 檢查檔案是否存在
-f file 檢查檔案是否存在且為檔案
-r file 檢查檔案是否存在且可讀
-s file 檢查檔案是否存在且非空
-w file 檢查檔案是否存在且可寫
-x file 檢查檔案是否存在且可執行
-O file 檢查檔案是否存在且屬當前使用者
-G file 檢查檔案是否存在且預設組與當前使用者相同
file1 -nt file2 檢查file1是否新於file2
file1 -ot file2 檢查file1是否舊於file2
4)複合條件&&與、||或
#!/bin/bash
if [ -e str ] && [ -f zero ]
then
echo "file all exist"
fi
5)雙圓括號
#!/bin/bash
str1=good
str2=wrong
if (( $str1 > $str2 )) 雙圓括號中表達式裡的大於號不用轉義
then echo "$str1 is greater than $str2"
else
echo "$str1 is less than $str2"
fi
6)雙方括號
#!/bin/bash
if [[ $USER == r* ]] 支援萬用字元模式
then
echo "welcome root user"
else
echo "sorry"
fi
7)case分支
#!/bin/bash
case $USER in
root|hunterno4)
echo "welcome root user";; 尾部兩個分號
mysql)
echo "welcome to database";;
surfftp)
echo "nice to meet you";;
*) 都不匹配時的default語句
echo "i don't know you";;
esac
二、迴圈語句
1.for命令
1)for迴圈
#!/bin/bash
for command in `ls /bin` for迴圈預設每個值以空格來分割
do
echo "command in /bin is $command"
done
#!/bin/bash
for file in /usr/local/program/package/*
do
if [ -d "$file" ] 檔案用引號圈起,以避免檔案含空格等情況
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
2)欄位分隔符
#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n' 修改IFS分隔符為換行符,也可同時賦值為:;"等等
for str in `cat /home/hunterno4/passwd`
do
echo "str in passwd is $str"
done
IFS=$IFS.OLD 恢復IFS分隔符預設值
3)C語言風格的for迴圈
#!/bin/bash
for ((i = 0;i<5 ;i++)) 此時變數與值間可以有空格,變數不用加$號
do
echo "current number is $i"
done
2.while命令
#!/bin/bash
i=5
while [ $i -gt 0 ]
do
echo $i
i=$[ $i-1 ]
done
3.巢狀迴圈
#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n'
for row in `cat /etc/passwd`
do
echo "passwd row in $row ———"
IFS=$':'
for words in $row
do
echo " $words"
done
done
IFS=$IFS.OLD
4.迴圈控制
1)break
#!/bin/bash
i=5
while [ $i -gt 0 ]
do
echo $i
i=$[ $i-1 ]
if [ $i -eq 3 ]
then
break 自動終止最裡面的迴圈,break n,終止n層迴圈
fi
done
2)continue
#!/bin/bash
i=10
while [ $i -gt 0 ]
do
i=$[ $i-1 ]
if [ $i -gt 3 ] && [ $i -lt 6 ]
then
continue continue n則指定繼續執行哪級迴圈
fi
echo "$i"
done > output.txt 將迴圈過程中的結果重定向輸出到檔案