tag 标签: shell编程

相关博文
  • 热度 2
    2023-5-4 23:26
    1504 次阅读|
    0 个评论
    【Shell编程】| if 判断的五个关键点 我们在 Shell 脚本中,最常用的流程控制就是 if 比较语句了,当然你也许觉得它太小儿科,但是你真的了解透彻了吗? 最近在编写一些测试程序的时候,对 if 的使用较为片面,很多小的功能都需要去各个地方百度查询,极为不便,因此也想着空闲时候,对 if 进行详细总结,一来加深印象,二来是为了打造一个 if 语句的最详细的使用指南。 1、if语法格式 1.1 if格式 if condition; then commands; fi 1.2 else if 和 else if condition; then commands; else if condition; then commands; else commands; fi if 语法部分不用多少,主要在于用法多样! 2、算数比较 算数比较包括 大于、小于、等于、不等于、大于等于、小于等于 运算符 说明 举例 -eq equal,检测两个数是否相等,相等返回 true。 返回 false。 -ne not equal,检测两个数是否不相等,不相等返回 true。 返回 true。 -gt greater than,检测左边的数是否大于右边的,如果是,则返回 true。 返回 false。 -lt less than,检测左边的数是否小于右边的,如果是,则返回 true。 返回 true。 -ge greater equal,检测左边的数是否大于等于右边的,如果是,则返回 true。 返回 false。 -le less equal,检测左边的数是否小于等于右边的,如果是,则返回 true。 返回 true。 比较条件通常被放置在封闭的中括号内。一定要注意在 与操作数之间有一个空格。 如果忘记了这个空格,脚本就会报错。 在算数比较运算中,少不了 逻辑与、逻辑或、逻辑非 运算。 运算符 说明 举例 ! 非运算,表达式为 true 则返回 false,否则返回 true。 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 返回 true。 -a 与运算,两个表达式都为 true 才返回 true。 返回 false。 3、文件判断 该部分主要包括:文件判断、目录判断、权限判断、是否存在判断等 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。 返回 false。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 返回 false。 -d file 检测文件是否是目录,如果是,则返回 true。 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 返回 true。 -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 返回 false。 -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 返回 false。 -p file 检测文件是否是有名管道,如果是,则返回 true。 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 返回 true。 -L file 检测文件是否是符号链接,如果是,则返回为true。 返回 true。 4、字符串判断 字符串操作判断包括:是否为空、两个字符串比较、字符串存在等 进行字符串比较时, 最好用双中括号 ,因为有时候采用单个中括号会产生错误。 运算符 说明 举例 = 检测两个字符串是否相等,相等返回 true。 ] 或者 ] 返回 false。 != 检测两个字符串是否不相等,不相等返回 true。 ] 返回 true。 -z 检测字符串长度是否为0,为0返回 true。 ] 返回 false。 -n 检测字符串长度是否不为 0,不为 0 返回 true。 ] 返回 true。 $ 检测字符串是否不为空,不为空返回 true。 ] 返回 true。 按照ASCII比较两个字符串字典排序,如果大于则为true $str2 ]] < 按照ASCII比较两个字符串字典排序,如果小于则为true ] 5、test指令测试 test 命令可以用来测试条件。用test可以避免使用过多的括号,增强代码的可读性。 if ; then echo "True" ; fi ​ if test $var -eq 0 ; then echo "True" ; fi 注意, test 是一个外部程序,需要衍生出对应的进程,而 [ 是 Bash 的一个内部函数,因此后者的执行效率更高。 test 兼容于 Bourne shell 、 ash 、 dash 等
  • 热度 12
    2013-6-5 11:04
    911 次阅读|
    0 个评论
      作者:武汉华嵌    讲师   张老师          shell 编程中常用到的文本过滤的方法有grep 、awk 、sed,以下分别对这三种文本过滤的方式进行大致的总结下:   grep 的使用: 一、grep一般格式:          grep 基本正则表达式        这里的正则表达式可以为字符串。在grep命令中输入字符串参数时,最好将其用双引号括起来。调用变量时也可以使用双引号。在调用模式匹配事,应使用单引号。   二、grep常用选项:        -c   只输出匹配行的计数。        -i   不区分大小写(只用于单字符)。        -h   查询多文件时不显示文件名。        -l   查询多文件时只输出包含匹配字符的文件名。        -n   显示匹配行及行号。        -s   不显示不存在或无匹配文本的错误信息。        -v   显示不包含匹配文本的所有行。   三、常用选项的使用: 1、 查询多个文件:    $grep  “hello” *.doc    num.doc:hello    sum.doc:hello world   说明在num.doc 和sum.doc中有字符串“hello“。   2、 行匹配:      $grep -c “123” *.doc    num.doc:2    sum.doc:2    说明在num.doc 和sum.doc中有字符串“123“各为两行。   3、 显示满足匹配模式的所有行数:    $grep –n “123” *.doc    num.doc:1:hao 123    num.doc:2:hao 123    sum.doc:2:hao 123    sum.doc:4:hao 1234   4、 显示所有不包含“123“的行:    $grep  -v “123” *.doc    num.doc:hello    num.doc:world    sum.doc:hello world    sum.doc:sui yue   5、 精确匹配:    如第三点,匹配“123”时,结果返回了“1234”的其它字符串。    $grep -n “123\” *.doc    num.doc:1:hao 123    num.doc:2:hao 123    sum.doc:2:hao 123    6、 大小写敏感:    缺省情况下,grep是大小写敏感的,如果要查询大小写不敏感的字符串,必须    使用-i选项。    $grep -i “just” *.doc    num.doc:Just    num.doc:just    四、grep和正则表达式 1、模式范围:    $ grep  ‘48 ’ mydata.doc    此命令在mydata.doc中匹配字符串“483”和“484”。 2、 不匹配行首:    $ grep  ‘^ ’ mydata.doc    此命令在mydata.doc中匹配除4或者8开头的行。 3、 设置大小写:    $ grep  ‘ ept’  mydata.doc    此命令在mydata.doc中匹配字符串“Sept”和“sept”。 4、匹配任意字符:    $ grep  ‘a…z’ mydata.doc    此命令在mydata.doc中匹配字符串以字符a开头和字符z结尾,中间为任意三个字符。 5、 模式出现的机率    $ grep ‘1\{2,\}’ mydata.doc    此命令说明数字1至少出现两次     awk 的使用: 一、awk的调用格式: awk的调用格式有三种: 第一种是命令行的方式,如下: awk ‘commands’ input-file 域分隔符,是可选的,awk使用空格作为缺省的域分隔符。   第二种方法是将awk命令插入到一个文件,并使awk程序可以执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。 第三种方法是将所有的awk命令插入一个单独文件,然后调用: awk –f awk-script-file input-file   二、动作和模式        任何awk语句都有模式和动作组成。模式部分决定动作语句何时触发及触发事件。 模式包括两个特殊字段BEGIN和END.,BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行,END语句用来在awk完成文本浏览动作后打印输出文本中输出和结尾状态标志。实际动作在大括号内指明。   三、域和记录        awk执行时,其浏览域标记为$1,$2 ….$n.。这种方法称为域标识。     1、保存awk输出 第一种方法: $awk ‘{print $0}’ mydata.txt newfile.txt 显示屏上不会输出结果。   第二种方法: $awk ‘{print $0}’ mydata.txt | tee newfile.txt 输出到文件中,同时显示在显示器上。   2、使用标准输入 第一种方法:使用awk脚本输入文件格式 $myawk.awk inputfile.txt 第二种方法:使用重定向 $myawk.awk  inputfile.txt 第三种方法:使用管道 $inputfile.txt | myawk.awk   3、打印所有记录 $awk ‘{print $0}’ myfile.txt 由于没有模式部分,只有动作部分,动作必须用花括号括起来。   Lisi 25 wuhan Wangjian 33 shanghai Caiming 55 shenzhen 4、打印单独记录 要用逗号分隔域 $awk ‘{print $1,$2}’ myfile.txt Lisi 25 Wangjian 33 Caiming 55   5、打印报告头 $awk ‘BEGIN {print “Name Age\n******************“} {print $1”\t”$2}’ mfile.txt   Name    Age *************** Lisi      25 Wangjian 33 Caiming 55   6、打印信息尾 $awk ‘BEGIN {print “Name \n****** “} {print $1 } END {“end of report\n”}’ mfile.txt     sed 的使用: 一、sed调用格式 sed调用格式有三种: 第一种命令行方式: sed ‘command’ inputfile command要加单引号,也允许加双引号。 第二种使用sed脚本文件: sed    –f  sed-script-file inputfile 第三种使用第一行具有sed命令解释器的sed脚本文件: sed-script-file   inputfile   二、sed选项: n 不打印:sed不写编辑行到标准输出,缺省为打印所有行。P命令可以用来打印编辑行。 c 下一命令是编辑命令。使用多项编辑时加入选项。 f 如果正在调用sed脚本文件,使用此选项。此选项通知sed脚本文件支持所有的sed命令。   三、sed常规用法: 1、 保存sed 输出 $ sed  ‘command’ inputfile  outfile   2、 sed在文件中查找文本的方式 sed浏览文件时,默认从第一行开始,有两种方法定位文本: 第一种:使用行号,可以用简单数字或是一个行号范围。 第二种:使用正则表达式。   Sed定位文本的一些方式,如下:   x x表示行号。 x,y 表示行号范围从x到y。 /pattern/ 查找包含模式的行。 x,/pattern 通过行号和模式查询匹配行。 x,y! 查找不包含指定行号x到y的行。   3、 sed编辑命令   p 打印匹配行 = 显示文件行号 a\ 在定位行号后附加拳文本信息 i\ 在定位行号后插入拳文本信息 d 删除定位行 c\ 用拳文本替换定位文本 s 使用替换模式替换相应模式 r 从另一个文件中读文本 w 写文本到一个文件 q 第一个模式匹配完成后推出或立即推出 l 显示与八进制ASCII代码造价的控制字符 {} 在定位行执行的命令组 n 从另一个文件中读文本下一行,并附加在下一行 g 将模式2粘贴到/pattern n/ y 传送字符 n 延续到下一输入行;允许跨行的模式匹配语句。 4、 使用p显示行 $sed -n ‘2p’ myfile.txt Hello world! -n选项,显示打印定位行。   5、 打印范围 $sed -n ‘1,3p’ myfile.txt Hao 123 Hello world! Ni hao ma? 打印1到3行。   6、 打印模式 $sed -n ‘/123/’p myfile.txt Hao 123 匹配   7、 在指定行号匹配模式 $sed -n ‘5,/Hao/’p myfile.txt Hao ma? ------分隔线---------------------------- 上一篇:S3C2440上移植Qt输入法 下一篇:ARM异常处理小结