每天一个shell脚本之for&awk&less-2
2014-09-09 22:10
417 查看
下面脚本完成的工作的工作就是就是打印出子/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,
上部分功能介绍
#!/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,
上部分功能介绍
相关文章推荐
- 一个shell for循环与case结合的脚本(监控程序状态)
- 执行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”
- 运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”
- shell小技巧--用“$$”和"$0"防止同一个脚本启动多次
- 使用for、if语句添加用户的一个shell脚本
- shell脚本--使用for if date awk
- Linux基本功十三:shell脚本Sed & Awk 及软件的安装
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
- 如何在shell脚本里传递一个变量给awk
- 每天一个linux命令(62):sh命令 /Linux中执行shell脚本的4种方法总结
- shell awk 脚本中怎么使某一列都增加一个数,这一列的数是不同的
- sed && awk工具 及一些常用的shell脚本
- 每天一个shell脚本--1
- 一个shell for循环与case结合的脚本(监控程序状态)
- shell脚本怎样表示一个for循环
- 每天都要写一个shell脚本
- awk&amp;amp;&amp;amp;sed脚本语言
- shell脚本问题01--awk
- 如何编写一个shell脚本