linux中“$?”標記有什麼作用?
獲取執行上一個指令的返回值
0:成功
非0:失敗
如何調試shell腳本 ?
-x
進入跟蹤方式,顯示所執行的每一條命令
查看系統當前進程連接數?
$ ps aux |wc -l
編寫如下shell程序
a.要求能判斷當前linux系統的發佈版,是Ubuntu、Centos、Fedora、SUSE等
$ grep -i '^NAME' /etc/os-release | cut -d\" -f2
編寫如下shell程序
a.從命令行接收兩個數,以及邏輯運算符(>、>=、<、<=、==、!=),打印判斷結果
b.例如: bash 腳本名 數字1 <= 數字2
#!/bin/bash
#Author:zhongxin
read -p "請輸入數字1:" num1
read -p "請輸入比較符號:" check
read -p "請輸入數字2:" num2
if test $check = '>='
then
check='-ge'
fi
if test $check = '<='
then
check='-le'
fi
if test $check = '!='
then
check='-ne'
fi
if [ ${num1} ${check} ${num2} ]
then
echo "正確"
else
echo "錯誤"
fi
編寫如下shell程序
a.輸入4個大於0小於等於20的數字,統計它們的和、最小的數字和最大的數字
b.要求有異常數字校驗
#!/bin/bash
#Author:zhongxin
max=$1
min=$2
sum=0
if [[ $# -ne 4 ]];then
echo "請輸入4個數字"
exit 1
fi
for i in $@
do
if [[ $i -gt 0 ]] && [[ $i -le 20 ]] ;then
if [ $max -lt $i ];then
max=$i
fi
if [ $min -gt $i ];then
min=$i
fi
let sum+=i
else
echo "請輸入大於0小於等於20的數字"
exit 1
fi
done
echo "最大值:$max"
echo "最小值:$min"
echo "和:$sum"
awk
文本處理工具,處理數據並生成結果報告
awk‘BEGIN{}pattern{commands}END{}’file
some command|awk‘BEGIN{}pattern{commands}END{}’
BEGIN處理數據之前執行
pattern匹配模式
commands處理的命令
END處理數據之後執行
內置變量
$0
整行內容$1~$n
當前行的第1~n個字段NF
當前行字段數NR
當前行號,從1開始FS
輸入字段分割符,默認爲空格或tab鍵RS
輸入行分割符,默認爲回車符OFS
輸入字段分割符,默認爲空格ORS
輸入行分割符,默認爲回車符
輸出以 :
分割的最後一列內容
$ awk 'BEGIN{FS=":"} {print $NF}' passwd
輸出以 :
分割的 games
開頭的行到 new
開頭的行的最後一列內容
$ awk 'BEGIN{FS=":"}/^games/,/^new/{print $NF}' passwd
printf格式符
%s
字符串%d
十進制數字%f
浮點數+
右對齊-
左對齊
以 %s\n
的格式輸出
$ awk 'BEGIN{FS=":"}/^games/,/^new/{printf "%s\n" , $1}' passwd
$ awk 'BEGIN{FS=":"}/^games/,/^new/{printf "%20s\n" , $1}' passwd
$ awk 'BEGIN{FS=":"}/^games/,/^new/{printf "%20s %s\n" , $1,$NF}' passwd
$ awk 'BEGIN{FS=":"}/^games/,/^new/{printf "%-20s\t%-20s\n" , $1,$NF}' passwd
格式化輸出以s開頭的行好和第一列內容
$ awk 'BEGIN{FS=":"}/^s/{printf "%d\t%-10s\n" , NR,$1}' passwd
格式化輸出第三例大於100的內容
$ awk -F ":" '$3 > 100 {printf "%-10s\t%-10s\n",$1,$(NF-1)}' passwd
添加頭部和尾部
$ awk -F ":" 'BEGIN{printf "%-10s\t%-10s\n","username","path"}$3 > 100 {COUNT++;printf "%-10s\t%-10s\n",$1,$(NF-1)}END{printf "%-10s\t%-10s\n","totally",COUNT}' passwd
使用文件
# awk1.awk
BEGIN{
printf "%-20s\t%-20s\n","UserName","Path"
}
{
if ($3 > 100){
COUNT++
printf "%-20s\t%-20s\n",$1,$(NF-1)
}
}
END{
printf "%-20s\t%-20s\n","Totally",COUNT
}
$ awk -F ':' -f awk1.awk passwd
日誌分析
獲取每個測試人員執行的用例數
BEGIN{
printf "%-10s%-10s\n","Tester","TotalTestcases"
}
{
USERS[$4] += 1
}
END{
for (u in USERS){
printf "%-10s%-10s\n",u,USERS[u]
}
}
$ awk -f 1201.awk testcases.log
統計每位測試人員執行用例成功和失敗的總數
BEGIN{
printf "%-10s%-12s%-12s\n","Tester","PassTotal","FailTotal"
}
{
if ($5 == "Pass"){
SUCCESS[$4] += 1
}
else if($5 == "Fail"){
FAIL[$4] += 2
}
USERS[$4] += 1
}
END{
for (u in USERS){
printf "%-10s%-12s%-12s\n",u,SUCCESS[u],FAIL[u]
}
}
$ awk -f 1201_2.awk testcases.log