高级测试人员必备技能--------SHELL
一、SHELL基本知识
1)、变量语法
取出变量值可以加一个美元符号($)在变量前面,例如$a/$i;
变量在字符串中的场景:
num=2
echo "this is the ${num}nd" #如果不加{},系统会把$numnd作为一个变量查询,搜索不到数据会显示“this is the ”
2)、管道和重定向
管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l #file.txt中搜索包含有”hello”的行并计算其行数。
在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容
3)、流程控制
条件判断
IF...THEN...
语法:
if ....; then
....
elif ....; then
....
else
....
fi
case表达式可以用来匹配一个给定的字符串,而不是数字。
语法:
case ... in
...) do something here ;;
esac
循环
语法:
while ...; do
....
done
-------------------
for var in ....; do
....
done
4)、用户登陆进入系统后的系统环境变量
$HOME 使用者自己的目录
$PATH 执行命令时所搜寻的目录
$TZ 时区
$MAILCHECK 每隔多少秒检查是否有新的信件
$PS1 在命令列时的提示号
$PS2 当命令尚未打完时,Shell 要求再输入时的提示号
$MANPATH man 指令的搜寻路径
5)、特殊变量和符号
$0 这个程序的执行名字
$n 这个程序的第n个参数值,n=1..9
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个指令的PID
$? 执行上一个指令的返回值
"" 部分引用,不屏蔽特殊字符
' ' 全引用,屏蔽所有字符,包含字符字符
`` 反斜杠的功能是命令替换,将反引号中的字符串做为命令来执行,例如:A=`date`
6)、字符串/整数比较
字符串比较:
字符串1 = 字符串2 两个字串相等时为真
字符串1 != 字符串2 当两个字串不等时为真
-n 字符串 当字符串的长度大于0时为真
-z 字符串 字符串的长度为0时为真
字符串 当串字符串为非空时为真
数字比较:
数字1 -eq 数字2 两数相等为真
数字1 -ne 数字2 两数不等为真
数字1 -gt 数字2 数字1大于数字2为真
数字1 -ge 数字2 数字1大于等于数字2为真
数字1 -lt 数字2 数字1小于数字2为真
数字1 -le 数字2 数字1小于等于数字2为真
二、SHELL常用命令
ls命令用法:
ls -p #产生带给目录加注反斜杠的目录列表
ls -l #以列表请示显示当期目录下所有文件和文件夹
ls -l [abc]* #查找a/b/c开头的文件。
man 【命令名】 #在任何命令之后给help参数,也可以显示该命令的帮助信息
pwd #查看当前目录相对于根目录的位置
grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt,显示出所有包含'pattern'的行数据。
grep "abc" /opt/* #查询/opt/目录下所有文件中包含abc的内容;
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令。
read var: 提示用户输入,并将输入赋值给变量。
sort file.txt: 对file.txt文件中的行进行排序。
find: 搜索文件比如:根据文件名搜索find . -name filename -print
tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
head file: 打印文本文件开头几行
tail file : 打印文本文件末尾几行
sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
sed参数含义:
a:新增,a的后面可以接字符串;nl /etc/passwd |sed '2a ABC' #新增ABC到文件passwd中,nl:以序列号形式显示文件;
c:整行取代,可以取代n1与n2之间的行;nl /etc/passwd |sed '2c ABC' #替换第二行的内容为ABC;
i:插入,出现在插入行的上一行;nl /etc/passwd |sed '2i ABC' #插入ABC到文件passwd中的第二行;
d:删除,nl /etc/passwd |sed '2,5d' #删除passwd文件中的2到5行;
p:打印,打印某个选择的数据,通常与sed -n一起使用;nl /etc/passwd |sed -n '2,5p' #打印passwd文件中的2到5行;
s:取代,部分取代,不以行为单位,如下:
eg:
sed 's/cat/dog/' cats > newtext.file #将cats文件中的cat查找并替换成dog;
sed 's/[Cc]at/dog/' cats > newtext.file #将cats文件中的cat/Cat查找并替换成dog;
sed 's/\<[Cc]at/dog/' cats > newtext.file #将cats文件中以cat/Cat开头的字符串查找并替换成dog;
sed 's/[Cc]at\>/dog/' cats > newtext.file #将cats文件中以cat/Cat结尾的字符串查找并替换成dog;
sed 's/\<[Cc]at\>/& and dog/' cats > newtext.file #将cats文件中以cat/Cat开头并结尾的查找并替换成cat/Cat and dog,cat/Cat大小写维持不变。
sed -n '5,10p' /etc/passwd #显示文件中的5到10行。
sed '/^$/d' #删除空行;
sed 's/^.*addr://' #addr:前面的内容替换成空。
备注:以上操作对原文件无效,执行后,原文件不发生变化,可生成到新文件中处理,如果需要修改原文件需要用sed -i。
awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA,-F后面的逗号为拆分符,$1后面的逗号为显示出来的分隔符。
cat file.txt | awk '{print $1}' #拆分file.txt中的第一列值,可把文件中的值看成字段;
cat file.txt | awk -F, '{print $1 "," $3 }' #file.txt中以逗号为分隔符,显示$1,$3;
标准输入输出:
1. 标准输入 (stdin) :代码为 0 ,使用 < 戒 << ;
2. 标准输出 (stdout):代码为 1 ,使用 > 戒 >> ;
3. 标准错诨输出(stderr):代码为 2 ,使用 2> 戒 2>> ;
/dev/null:垃圾桶黑洞装置
find /home -user guser 2>/dev/null: #查找/home目录下属于guser用户的文件,并讲错误的信息过滤,2代表错误输出。
WC:
[root@www ~]# wc [-lwm] 选项不参数: -l :仅列出行; -w :仅列出多少字(英文单字); -m :多少字符;
双向重导向:tee
tee:既显示到屏幕,又记录到文件。
tee [-a] file # -a为追加方式添加到文件,无-a原文件直接替换。
cmd | tee [-a] file #同上
三、题型测验
1) 在Red Hat中,从root 用户切到userl用户,写出命令;
su - user1
2)
浙公网安备 33010602011771号