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