bash编程之 小技巧

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

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

>  :覆盖重定向

>> :追加重定向

 

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

&>

&>>

 

只重定向错误信息

2>

扫描二维码关注公众号,回复: 495888 查看本文章

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" 设置系统时间

 

猜你喜欢

转载自oracle-api.iteye.com/blog/2365412