紫馨

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

高级测试人员必备技能--------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)

 

posted on 2013-12-12 09:35  紫馨  阅读(176)  评论(0)    收藏  举报