每天一个shell脚本之for&awk&less-2

下面脚本完成的工作的工作就是就是打印出子/home目录下存在用户的配置文件.profile..脚本的内容很简单


#!/bin/bash

# for&awk.sh: 打印所有用户的配置文件

# 由Heiner Steven编写, 并由本书作者进行了修改.

FILE=.profile  #  用户的配置信息

for home in `awk -F: '{print $6}' /etc/passwd`
do
  [ -d "$home" ] || continue    # 如果没有home目录, 跳出本次循环.
  [ -r "$home" ] || continue    # 如果home目录没有读权限, 跳出本次循环.
  (cd $home; [ -e $FILE ] && less $FILE)
done

exit 0


这里抓要研究一下三个问题

1)for for循环也是我们在shell脚本中常用的控制循环。

它的语法结构为

for  variable in argu_list

do

     comand list

while

就是这么简单,不过用起来还是很有技巧的。

上面结构中的argu_list 是一个参数表,variable是一个变量,每次循环 variable会被赋予参数列表中的不同值,直到所有参数

都遍历一遍。

comand_list  就是根据当前variable的值进行相应的操作。

上图中的例子,我们使用awk 会获得当前/etc/passwd 中的用户根目录,但这写目录不一定都存在,且具有相应的属性-这里上面的例子中

分别判断 home变量所对应的目录是否存在已经具有可读,为目录的属性。只有当以上两个条件都满足的情况下,才会执行下面的脚本。

举例:

#!/bin/bash

for course in chinese english math biology

do

       echo  $course

done

exit 0

效果


        [ -e $FILE ] && less $FILE   这句话表达的意思就是,如果FILE文件存在 那么就用less命令打开这个文件,-e 就是exist的意思[ -e $FILE]

相当与一个if语句,shell 编程中if语句中常用的判断参数如下

  –b 当file存在并且是块文件时返回真

  -c 当file存在并且是字符文件时返回真

  -d 当pathname存在并且是一个目录时返回真

  -e 当pathname指定的文件或目录存在时返回真

  -f 当file存在并且是正规文件时返回真

  -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真

  -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效

  -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

  -p 当file存在并且是命令管道时返回为真

  -r 当由pathname指定的文件或目录存在并且可读时返回为真

  -s 当file存在文件大小大于0时返回真

  -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真

  -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。

  -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

  同样比较字符写法的参数如下:

  -eq   等于

  -ne    不等于

  -gt    大于

  -lt    小于

  -le    小于等于

  -ge   大于等于

  -z    空串

  =    两个字符相等

  !=    两个字符不等

  -n    非空串

2)awk 命令 :这个命令具有很强大的功能,这里只介绍常用的功能

awk的基本功能是在文件或着字符串中基于制定规则浏览和抽取信息。注意是抽取,不是编辑啊

awk 命令格式: awk  -F:field-separator  'commands' input-files   也就是说 awk -F:域分割符  ‘命令’  需要的文件  

举个例子我的电脑 /etc/passwd下的内容如下

我使用命令 awk -F:  '{if($1 == "root") print $0)' /etc/passwd

命令的意思就是找出第一个域为root的行,注意这里没行中都是用“:“ 分割的,那么”:“就是域分割符了。

注意条件语句要用元括号括住,动作命令要用花括号括住这里是prinf $0 ,注意命令要用 ‘’ 包含。

当然也可以使用正则表达所,具体请在网上查找具体的方法。

命令执行后的结果是


3)less 命令

less命令和more命令很像,不过它比more强悍好用很多,可以实现分页查看,后退,前进,查找都是可以的,只不过它只是一个查看器,

在使用过程中,感觉它的很多操作和vi是一样的。

例如:VI 中使用 H,J,K,L  分别实现 左移,下移,上移,右移,在less中 同样可以使用。

VI中可以使用 ctrl+f 和ctrl+b实现前翻页和后翻页,这在less中也是可以实现的。

VI中分别使用 shift+g 和gg跳到文章末尾和开头,但是在less中使用G和g跳到末尾和开头,也是很相似。

退出less同样也可以使用q,

上部分功能介绍





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值