shell命令总结

重定向语法:

>> ;如果文件不存在,将创建新的文件,并将数据送至此文件;如果文件存在,则将数据添加在文件后面
>  ;如果文件不存在,同上,如果文件存在,先将文件清空,然后将数据填入此文件

>>会接到最后一行然后新增一行把数据接在后面;
还有一个三个大于号的:
>>> : 这个是接在最后一行的后面(不新增一行);如:
echo "hello" >> /tmp/temp.txt
echo "hello" >> /tmp/temp.txt
echo "hello" >> /tmp/temp.txt
的结果为:
hello
hello
hello

#########
echo "hello" >>> /tmp/temp.txt
echo "hello" >>> /tmp/temp.txt
echo "hello" >>> /tmp/temp.txt
的结果是:
hellohellohello

------------------------------------------------------------------------------------------------------------------

看如下代码:

while IFS=: read path filename readRegular
do

echo ${path} ${filename} ${readRegular}
done < merge.conf

其中merge.conf配置文件的内容是:

statpush:push_active:p*
statdot:dot_active:p*
companytermactive:term_active:c*
companytermreg:term_reg:c*
mobilenumber:mobile:c*
callphonerecord:phone_record:c*
statpclick:pclick_active:p*

主要意思是从merge.conf文件中逐行读取数据,以:来分割每行数据,最终输出每行数据中的字段。

在实际测试中发现一个问题,就是输出的时候总是无法输出最后一行,原因是最后一行没有换行符,需要在最后一行敲回车,才能把最后一行读出来

上面的shell代码里用到了几个语法

while 条件 do  done, IFS, read, <.现对这几个语法进行介绍:

1. IFS

在bash中IFS是内部的域分隔符,比如一段字符为:abc,bcd,cdf

我们要对这段字符解析,按,进行分割,那么IFS,  ---就是标明用,来分割这段字符

manual中对其的叙述如下:
IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is “”.
如下是一些值得注意的地方。
1. IFS的默认值为:空白(包括:空格,tab, 和新行),将其ASSII码用十六进制打印出来就是:20 09 0a (见下面的shell脚本)。
2. IFS对空格的空白的处理和其他字符不一样,左右两半的纯空白会被忽略,多个连续的空白被当成一个IFS处理。
3. S*中使用IFS中的第一个字符。
4. awk中的FS(域分隔符)也和IFS有类似的用法和作用。

2. while  done

详解见:http://codingstandards.iteye.com/blog/780524

3. read

详解见:http://blog.sina.com.cn/s/blog_4077692e0100r7ct.html

4. < 

详解见: http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

-------------------------------------------------------------------------------------------------------------

输出重定向可以使用通配符,举例如下:

[wxwkuser@oss ~]$ cat 11.txt 
111
[wxwkuser@oss ~]$ cat 12.txt 
1212
[wxwkuser@oss ~]$ cat 1* > test.txt
[wxwkuser@oss ~]$ cat test.txt 
111
1212
[wxwkuser@oss ~]$ 

------------------------------------------------------------------------------------------------------------

第一个 awk

让我们继续,开始使用 awk,以了解其工作原理。在命令行中输入以下命令:


$ awk '{ print }' /etc/passwd

    您将会见到 /etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 awk 时,我们指定 /etc/passwd 作为输入文件。执行 awk 时,它依次对 /etc/passwd 中的每一行执行 print 命令。所有输出都发送到 stdout,所得到的结果与与执行catting /etc/passwd完全相同。

    现在,解释 { print } 代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,那么将打印当前行的全部内容。

这里是另一个 awk 示例,它的作用与上例完全相同:


$ awk '{ print $0 }' /etc/passwd

在 awk 中, $0 变量表示整个当前行,所以 printprint $0 的作用完全一样。

如果您愿意,可以创建一个 awk 程序,让它输出与输入数据完全无关的数据。以下是一个示例:


$ awk '{ print "" }' /etc/passwd

只要将 "" 字符串传递给 print 命令,它就会打印空白行。如果测试该脚本,将会发现对于 /etc/passwd 文件中的每一行,awk 都输出一个空白行。再次说明, awk 对输入文件中的每一行都执行这个脚本。以下是另一个示例:


$ awk '{ print "hiya" }' /etc/passwd

运行这个脚本将在您的屏幕上写满 hiya。:)

多个字段

    awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引用 awk 脚本中每个独立的字段。以下脚本将打印出您的系统上所有用户帐户的列表:


$ awk -F":" '{ print $1 }' /etc/passwd

    上例中,在调用 awk 时,使用 -F 选项来指定 ":" 作为字段分隔符。awk 处理 print $1 命令时,它会打印出在输入文件中每一行中出现的第一个字段。以下是另一个示例:


$ awk -F":" '{ print $1 $3 }' /etc/passwd

以下是该脚本输出的摘录:


halt7
operator11
root0
shutdown6
sync5
bin1
....etc.


cat /etc/passwd |awk -F',' 'NF > 6 && length($4) == 14 {print $0}'

这句命令的意思是:逐行解析passwd文件,如果解析后的数组长度大于6并且第四个字段的长度为14,则输出整行。

注意:$0是整行,$1,$2是解析后数组的第一个value

----------------------------------------------------------------------------------------------------

sort命令:

详解见:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

grep命令:

详解见:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html

sed命令:

详解见:http://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html

------------------------------------------------------------------------------------------------------

将命令的结果赋值给变量

[wxwkuser@oss ~]$ tmp=$(ls | grep 1 | wc -l)
[wxwkuser@oss ~]$ echo $tmp
2

-------------------------------------------------------------------------------------------------------

查看目录的大小,du命令。

详解见http://blog.csdn.net/iamlaosong/article/details/7085178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值