Shell脚本中的⽂件名匹配和命令执⾏
理解下 shell 脚本中的⽂件名匹配和命令执⾏的顺序与结果。我们学习这个的⽬的是可以熟悉的在 shell 脚本中写出快速的到⽂件的命令。它可以匹配⽂件名中的任何字符串,匹配⽂件名中的单个字符以及匹配⽂件名中的字母或数字符号。
⾸先我们来看看匹配⽂件的符号的定义,匹配字符串类型的符号称之为元字符。匹配⽂件名中的任意字符串,同时也包括空字符串。
举例:ls /etc/*.conf ls /etc/h*.co*f。结果如下
我们看到成功的匹配到了 /etc ⽬录下的 h 开头的 con*f 结尾的所有⽂件,那么我们以后在⽂件的查中就很⽅便了。
下来我们来看看?匹配⽂件,那么它是能匹配⽂件名中的任何单个字符。
举例:ls /etc/hos?.conf ls /etc/??g.conf。结果如下所⽰
下来继续来看看 [ ] 匹配⽂件,[ ... ] 匹配 [ ] 中所包含的任意⼀个字符。有两种匹配⽅式:a> 杂乱匹配:ls /etc/[f;b> 范围匹配:ls [0-9][a-zA-Z].txt
我们看到已经匹配出来了。[ !... ] 匹配 [ ] 中⾮感叹号!之后的任意⼀个字符,它与上⼀条规则刚好相反。举例:ls [!0-9]*.txt。此条是匹配⾮数字开头的后缀名为 txt 的所有⽂件。如下
下来我们来看看⼀个综合应⽤:查⼀个以数字开头,接着包括两个⼩写英⽂字母,然后再接任意两个字符的以 .conf 结尾的⽂件名。(如:f 是符合条件的)
#! /bin/bash
ls [0-9][a-z][a-z].conf
我们来看看结果
我们在平时的输出 log 中通常会以特定字符+年⽉⽇来进⾏保存,那么我们的创建 log 的⽅式就如下
如果我们能熟练的使⽤匹配字符,那么便可以⼤⼤减少在查⽂件名上的⼯作量,这是⼀种⾮常有效的模式匹配⽅法。
下来我们接着看看命令执⾏的顺序和结果。我们知道在⼀般的命令中,它是有返回执⾏结果的,成功则返回 1,失败返回 0;同样的,在Linux中,也是有命令的返回结果的,只不过是它⽐较特殊,成功时返回 0,失败时返回⾮ 0。下来我们看看⽰例,如下
我们看到在 ls abcs.log 时,由于没有这个⽂件,因此它的返回值为 2(⾮ 0);在 时,这个⽂件是存在的,因此它的返回值为 0。
下来我们来看看命令的执⾏控制:a> 使⽤ && 符号;b> 使⽤ || 符号;c> 命令的组合使⽤“;”。
a> 使⽤ && 符号
格式:命令 1 && 命令 2 && ··· ;说明:如果命令 1 执⾏成功,那么执⾏命令 2 ···
举例:cp /f /mnt/ && echo "Copy file success"
我们看到在有⽂件存在的情况下,便执⾏后⾯的 echo 命令,打印出了 Copy file success。在前⾯的命
令没有执⾏成功的情况下,没有继续执⾏后⾯的echo 命令。我们在编译源码时:./configure && make && make install ,它的⽤处是⽤于脚本的执⾏的调试。
b> 使⽤ || 符号
格式:命令 1 || 命令 2 || ···;说明:如果 || 左边的命令执⾏失败了,那么接着执⾏右边的命令。
举例: || echo "Copy file failed"
它的⽤处也是⽤于⽀持脚本的执⾏的调试。
c> 命令的组合使⽤
格式 1:“;”⼀次下达两个以上的命令
格式 2:( 命令 1;命令 2;... ) 在当前 shell 中执⾏
格式 3:{ 命令 1;命令 2;... } 在⼦ shell 中执⾏
举例:
1、ls /usr/;cd;echo "OK"
2、(ls; ; cd) || echo "success"
我们看到在 || 后,执⾏前⾯的命令后,如果执⾏成功则后⾯的命令不会执⾏。
shell脚本返回执行结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。