條件判斷:case語句
case 變量引用 in
PAT1)
;;
PAT2)
;;
…
*)
默認分支
;;
esac
case支持glob風格的通配符:
*: 任意長度任意字符
?: 任意單個字符
[]:指定范圍內的任意單個字符
a|b: a或b
abc|efg : abc或efg
循環:
while 的特殊用法:
while read LINE;do
file=/path/to/somefile
指令
done < /path/to/somefile
讀取文件中的第一行進行處理
$LINK 表示要處理文件的每行
********************************
break 條件成立就退出內循環但會正常執行外循環的后續指令,并進行下一輪的外循環
break 2 :直接退出外循環,退出腳本
continue :
條件成立就跳過本次內循環進行下一輪的內循環;內循環后面的指令不執行但外循環后面的指令可以繼續
continue 2 退出內循環continue后面的內,外循環的指令都不執行;開始下一輪的外循環執行
***********************
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
do
循環體
done
for 變量名 in 列表 ;do
循環體
done
for后是變量名不是變量引用所以不用加$
in 后面可以用指令“ls /boot” 或通配符不加”“ 位置變量”$@”
for i in {1..10};do
cat >>f1 <<-eof
xxx
eof
done
*****************************
在腳本最后加上wait 則在后臺執行的程序時間到會自動終止
let 定義變量時 后面運算結果為0時返回假
let 命令i=0 i++ 則第二次循環會先看i的值再加1,i=0則返回假
let i++ 是先賦值(調用)i的值再加1
let ++i 是i先+1再賦值i
例:
i=3
a=$((i++) 先把i的值賦給a,然后i加1 ,所以a=3,i=4
b=$((++i) 先把i的值加1,i=5,再賦給b,b=5
*********************************
n=10 ;eval echo {1..$n}
eval會先識別{}里面的變量
for i in eval {1..$n};do
don
************************************
pgrep httpd 查看服務是否開啟
killall -0 httpd &>/dev/null
-0 發信號檢查錯誤為假則服務沒有啟動
while : ;do
if killall -0 httpd &>/dev/null ;then
:
else
sysemctl restart httpd
echo at `date +%F %T` restart httpd >>/path/to/*.logs
將執行記錄在目錄文件中
fi
sleep 10
done
里面的“:”是什么也不做的意思
************************************
自動創建菜單
PS3=”please choose the var(1-4) : ”
select var in baoyu yanwo ;do
case $var in
baoyu)
echo $var price is 1000
break
;;
yanwo)
….
;;
esac
done
配合case判斷
$var :可以是列表中的每一個參數(自動生成)
PS3:提示輸入符
選擇是1則是把$var賦值為baoyu
組
數組名稱
下標
數值索引:編號從0開始
關聯數組:下標可以是任意字符串即關聯索引的數組
稀疏格式 :索引不連續
訪問數組里的變量要通過數組名和下標
聲明數組
declare -a
declare -A 關聯數組
普通數組:
數組名 下標 =”變量值”
var[0]=”ceo”
var[1]=”coo”
……
一次性賦值一個元素:
mane=(“mage” ”wang“)
交互式賦值:
read -a var
ceo cto boss
echo ${var[1]} cto
declare -a var
var【2】=ceo
filename=`ls /etc`
echo ${filename[*]}
同上也可以
filename=(/etc/*)
*********************
稀疏式賦值
關聯數組賦值:
顯示數組:
echo ${var} 默認是0(ceo)
echo ${var[1]}
echo ${name[0]}為mage
*********************************
查看數組所有元素:
ehco ${數組名[*]}
echo ${數組名[@]}
查看數組元素個數:
echo ${#v數組名【*】}
name[${#name[*]}]=x
給一個數組添加一個新值
name[數組元素個數]=x
unset 數組名 刪除數組所有值
********************
字符串切片:
${#var}
: 3 跳過3個
: -3 只取倒數3個(單個負數要加空格)
:3:4 跳過3個取4個
:3:-4 除了前三后4只要中間
echo ${var#*word}
從左到右
#最左邊第一個開始到第一次匹配到關鍵字結束的都刪除
word為關鍵字可以為“:” “ ”空格不用加引號或單個字母
## 貪婪模式
最左邊第一個開始到最后一次匹配到關鍵字結束的都刪除
從右到左
echo ${var%:*}
%% 貪婪模式
從右到:左刪除{var//root/wang}
貪婪模式配置到的都替換
查找并刪除
${var/pattern}:刪除var表示的字符串中第一次被pattern匹配到的字符串
${var//pattern}:刪除var表示的字符串中所有被pattern匹配到的字符串
${var/#pattern}:刪除var表示的字符串中所有以pattern為行首匹配到的字符串
${var/%pattern}:刪除var所表示的字符串中所有以pattern為行尾所匹配到的字符串
字符大小寫轉換
${var^^}:把var中的所有小寫字母轉換為大寫
${var,,}:把var中的所有大寫字母轉換為小寫
#開頭是
echo ${VAR/#root/wang}
以root開頭非貪婪模式
%結尾是
ehco ${var/%root/wang}
以root結尾的替換非貪婪模式
間接變量引用
var=ceo
ceo=wang
eval echo \$$var(相當于$ceo)
wang
echo ${!var}
wang
cmd=hostname
$cmd則直接執行hostname
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98577