每天一个shell脚本之for&awk&less-2
来源:互联网 发布:优化建议 翻译 编辑:程序博客网 时间:2024/06/06 14:11
下面脚本完成的工作的工作就是就是打印出子/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,
上部分功能介绍
- 每天一个shell脚本之for&awk&less-2
- Shell脚本之awk
- shell脚本之awk
- 每天一个shell脚本--1
- Shell 脚本学习之awk
- Shell脚本之awk篇
- shell脚本编程之awk
- 自动化脚本之Shell、awk
- Shell脚本之awk篇
- Shell脚本之awk篇
- Shell脚本之awk详解
- Shell脚本之awk详解
- Shell脚本之awk详解
- Shell脚本之awk详解
- shell脚本--使用for if date awk
- shell 脚本之for
- shell脚本之awk的简单使用
- linux-shell脚本命令之awk
- Java中的List转换成JSON报错(三)
- Codeforces 263 C. Circle of Numbers D. Cycle in Graph (dfs一般难度)
- 多线程中的使用共享变量的问题
- MyEclipse将工程进行移动的时候会对@Override报错
- c++中关于变量,引用,指针的简单转换
- 每天一个shell脚本之for&awk&less-2
- cocos2d-x学习资源汇总
- 1965年美国虐童事件(美国式犯罪背景资料)
- Java enum 初步使用
- 【坑】通过点击按钮改变<div>中的内容
- 在json封装成对象返回前台数据中,null和""区别
- ##位运算若干应用##
- 进程同步示例代码(依据信号量达到同步)
- Spring简介