`

bash编程之 小技巧

 
阅读更多

管道:将一个命令的输出作为一个命令的输入

只会重定向正确的输出信息

>  :覆盖重定向

>> :追加重定向

 

不管是错误还是正确的输出信息都会重定向

&>

&>>

 

只重定向错误信息

2>

2>>

 

 

 

bash中三种引用:

1. "":弱引用

test ="aaaaa"

echo "hello $test"

输出结果 hello aaaaa

 

2. '':强引用

test ="aaaaa"

echo 'hello $test'

输出结果 hello $test

 

3. ``:命令引用, 范围内的命令会执行

echo `more /etc/passwd`

 

 

    

$的用法总结:

$0  参数前的命令本身

$1、$2、$n  获取第n个参数

$#  参数的个数

$*  获取所有的参数

$@ 是传给脚本的所有参数的列表

$$ 是当前运行的进程ID号  

$! 是上一个运行的进程ID号  

$? 显示最后命令的退出状态,0表示没有错误,其他表示有错误 

$() $[] 是执行里面的代码得到的结果

${} 是引用变量的标准用法,比如${a}; $a是简写

${array[index]} 引用数组元素

${#array[*]} ${#array[@]} 数组的长度

$RANDOM  随机数

a = "world"  ${a:2:2}  对字符串切片,结果是rl

a = "world"  ${a: -2}  注意冒号之后有空格  取字符串最后两个字符,结果是ld

 

 

 

变量赋值:

${var:-word}: 如果var为空或未设置,那么返回word;否则,则返回var中的值;

${var:=word}:如果var为空或未设置,那么返回word,并且将word赋值给var;否则,返回var中的值;

${var:?err_info}:如果var为空或未设置,那么返回错误信息;否则,则返回var自身的值;

${var:+word}:如果var自身有正常数据,则返回word;

 

    

 

为脚本使用配置文件:

写个脚本,配置etc目录;

(1) 在配置文件中定义变量;

(2) 在脚本中source配置文件;

注意:在字符串比较时,操作符两端得有空格;

 

    

trap命令:

trap 'arg' SIGNAL

当收到信号SIGNAL时,执行''中的命令

信号1: 产生挂断,要么有人故意挂断线路或线路被意外断开。 

信号2: 序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl C)时发出。 

 

例如:

#trap 'rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2  当程序挂断或收到ctrl-c命令时清楚工作空间下的相关文件

#trap '' 1 2    当程序收到1 2信号时,继续执行

 

参考

http://www.ibm.com/developerworks/cn/aix/library/au-usingtraps/

http://man.linuxde.net/trap 

 

 

cut

    -d 定义分割符

    -f 定义要显示的那一列

 

 

du 显示文件大小

-sh filename  显示文件大小 

-h path  显示目录下每个文件的大小

 

 

uniq 去除文件中重复的行(仅去除相邻的重复行,去除不相邻的重复行要先使用sort排序)

    -c 在输出行前面加上每行在输入文件中出现的次数。

    -d 仅显示重复行。

    -u 仅显示不重复的行。

 

例:去除文件中重复的行,不相邻的也能去除

# cat filename | sort | uniq -c   

 

 

sort 对文件的行排序,默认按字符排序

    -n  :使用『纯数字』进行排序(默认是以文字型态来排序的);

    -r  :反向排序;

    -t  :分隔符,默认是用 [tab] 键来分隔;

    -k  :以那个区间 (field) 来进行排序的意思

 

    例: 对/etc/passwd中的uid排序

# sort -t : -k 3 -n /etc/passwd | cut -d : -f 3   或

# sort -t: -k3 -n  /etc/passwd | cut -d: -f3

 

 

head  显示前n行

  -c 显示字节数

  -n 显示的行数

       -行数 (-n 行数 的简写)

 

例: 对/etc/passwd中的uid排序,显示前3行

# sort -t: -k3 -n  /etc/passwd | cut -d: -f3 | head -3

 

 

tail 显示后n行

-f 监听文件是否有新的写入

-n 行数

-行数(-n 行数 的简写)

 

例: 对/etc/passwd中的uid排序,显示后3行

# sort -t: -k3 -n  /etc/passwd | cut -d: -f3 | tail -3

 

 

wc 统计文件中的行数、单词数和字节数

    - c 统计字节数。

    - l 统计行数。

    - w 统计单词数。 

 

 

date

    如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下:

    %n : 下一行

    %t : 跳格

    %H : 小时(00-23)

    %I : 小时(01-12)

    %k : 小时(0-23)

    %l : 小时(1-12)

    %M : 分钟(00-59)

    %p : 显示本地 AM 或 PM

    %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)

    %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数

    %S : 秒(00-60)

    %T : 直接显示时间 (24 小时制)

    %X : 相当于 %H:%M:%S

    %Z : 显示时区

    %a : 星期几 (Sun-Sat)

    %A : 星期几 (Sunday-Saturday)

    %b : 月份 (Jan-Dec)

    %B : 月份 (January-December)

    %c : 直接显示日期与时间

    %d : 日 (01-31)

    %D : 直接显示日期 (mm/dd/yy)

    %h : 同 %b

    %j : 一年中的第几天 (001-366)

    %m : 月份 (01-12)

    %U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)

    %w : 一周中的第几天 (0-6)

    %W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)

    %x : 直接显示日期 (mm/dd/yy)

    %y : 年份的最后两位数字 (00.99)

    %Y : 完整年份 (0000-9999)

 

    实例:

# date "+%Y-%m-%d %H:%M:%S"

# date "+%Y-%m-%d %H:%M:%S " -d "-3 year"   此刻往前推三年

# date "+%Y-%m-%d %H:%M:%S " -d "+3 month"  此刻往后推三月

# date "+%Y-%m-%d %H:%M:%S " -d "+10 day"

# date -s "2010-08-09 10:10:10" 设置系统时间

 

分享到:
评论

相关推荐

    高级Bash编程

    ### 高级Bash编程知识点概述 #### 一、引言 本教程旨在为初学者提供一条通往高级Bash编程的道路。它不仅适用于自学,也是课堂教学的理想材料,尤其是在教授编程概念方面。通过丰富的实例和练习,读者将逐步掌握...

    bash编程实例

    ### bash编程实例:基础知识与应用场景 #### 一、Shell与Bash简介 Shell是一种命令解释器,也是操作系统内核与用户之间的桥梁。它不仅能够解释并执行用户输入的命令,而且还是一种强大的编程语言。通过创建一系列...

    高级Bash脚本编程指南[1].3.9.1 (杨春敏 黄毅 译)【无重复页】.pdf

    但如果你已经具备相关编程经验,则可以更快地掌握中高级的Shell编程技巧。 书中的内容被分为多个部分,每个部分都侧重于不同的学习主题。首先,它解释了为什么需要使用Shell编程以及如何通过Sha-Bang(#!)来调用...

    Linux高级bash编程

    高级bash编程 高级Bash脚本编程指南(一) 目录 ++++ 第一部分. 热身 1. 为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊...

    高级Bash编程-by Mendel Cooper

    **高级Bash编程指南——由Mendel Cooper撰写** Bash(Bourne-Again SHell)是Linux和Unix系统中最常用...Mendel Cooper的教程虽然年代较早,但其涵盖的基本原理和技巧至今依然适用,是Bash编程者不可多得的参考资料。

    高级Bash 脚本编程指南 PDF

    在深入了解高级技巧之前,了解Bash的基础是必要的。Bash支持变量、条件语句、循环、函数等基本编程结构。例如,可以定义变量`VAR="hello"`,并在脚本中使用`echo $VAR`来打印它。Bash中的条件测试可以使用`[[ ... ]]...

    高级bash脚本编程指南(中英文合集)

    33.7. 各种小技巧 33.8. 安全话题 33.8.1. 被感染的脚本 33.8.2. 隐藏Shell 脚本源码 33.9. 移植话题 33.10. 在Windows 下进行Shell 编程 34. Bash, 版本 2 和 3 34.1. Bash, 版本2 34.2. Bash, 版本3 35. ...

    Linux中高效编写Bash脚本的9个技巧

    ### Linux中高效编写Bash脚本的9个技巧 #### 1. 在脚本中多写注释 注释在任何编程语言中都是至关重要的,它们帮助开发者理解代码的功能和目的。在Bash脚本中,注释同样非常重要,尤其是在团队环境中或者当你未来...

    Advanced Bash-Scripting Guide <>

    33.7. 各种小技巧 33.8. 安全话题 33.8.1. 被感染的脚本 33.8.2. 隐藏Shell 脚本源码 33.9. 移植话题 33.10. 在Windows 下进行Shell 编程 34. Bash, 版本 2 和 3 34.1. Bash, 版本2 34.2. Bash, 版本3 35. 后记 35.1...

    高级Bash脚本编程指南.docx

    《高级Bash脚本编程指南》是一份专为学习Bash脚本编程的详细教程,旨在帮助初学者从基础开始,逐步掌握高级的脚本编写技巧。Bash(Bourne-Again SHell)是Linux操作系统中最常用的命令行解释器,用于编写控制系统的...

Global site tag (gtag.js) - Google Analytics