Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 简洁的bash编程技巧

下面这几条是我自己在写shell代码的时候,比较喜欢的几种写法,抛砖引玉。1) 检查命令执行是否成功第一种写法,比较常见:
echo abcdee | grep -q abcd if [ $? -eq 0 ]; thenecho "Found"elseecho "Not found"fi
简洁的写法:
if echo abcdee | grep -q abc; thenecho "Found"elseecho "Not found"fi
当然你也可以不要if/else,不过这样可读性比较差:
[Sun Nov 04 05:58 AM] [kodango@devops] ~/workspace $ echo abcdee | grep -q abc && echo "Found" || echo "Not found"Found
2) 将标准输出与标准错误输出重定向到/dev/null第一种写法,比较常见:
grep "abc" test.txt 1>/dev/null 2>&1
常见的错误写法:
grep "abc" test.txt 2>&1 1>/dev/null
简洁的写法:
grep "abc" test.txt &> /dev/null
3) awk的使用举一个实际的例子,获取Xen DomU的id。常见的写法:
sudo xm li | grep vm_name | awk "{print $2}"
简洁的写法:
sudo xm li | awk "/vm_name/{print $2}"
4) 将一个文本的所有行用逗号连接起来假设文件内容如下所示:
[Sat Nov 03 10:04 PM] [kodango@devops] ~/workspace $ cat /tmp/test.txt 123
使用Sed命令:
[Sat Nov 03 10:14 PM] [kodango@devops] ~/workspace $ sed ":a;$!N;s/ /,/;ta" /tmp/test.txt 1,2,3
简洁的写法:
[Sat Nov 03 10:04 PM] [kodango@devops] ~/workspace $ paste -sd, /tmp/test.txt 1,2,3
5) 过滤重复行假设文件内容如下所示:
[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace $ sort /tmp/test.txt 1123
常用的方法:
[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace $ sort /tmp/test.txt | uniq123
简单的写法:
[Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace $ sort /tmp/test.txt -u123
6) grep查找单词假设一个文本的每一行是一个ip地址,例如
[Sat Nov 03 10:20 PM] [kodango@devops] ~/workspace $ cat /tmp/ip.list 10.0.0.110.0.0.1210.0.0.123
使用grep查找是否包括10.0.0.1这个ip地址。常见的写法:
[Sat Nov 03 10:22 PM] [kodango@devops] ~/workspace $ grep "10.0.0.1>" /tmp/ip.list 10.0.0.1
简单的方法(其实这方法不见得简单,只是为了说明-w这个参数还是很有用的)
[Sat Nov 03 10:23 PM] [kodango@devops] ~/workspace $ grep -w "10.0.0.1" /tmp/ip.list 10.0.0.1
顺便grep的-n/-H/-v/-f/-c这几参数都很有用。7) 临时设置环境变量常见的写法:
[Sat Nov 03 10:26 PM] [kodango@devops] ~/workspace $ export LC_ALL=zh_CN.UTF-8[六 11月 03 10:26 下午] [kodango@devops] ~/workspace $ date2012年 11月 03日 星期六 22:26:55 CST
简洁的写法:
[六 11月 03 10:26 下午] [kodango@devops] ~/workspace $ unset LC_ALL [Sat Nov 03 10:27 PM] [kodango@devops] ~/workspace $ LC_ALL=zh_CN.UTF-8 date 2012年 11月 03日 星期六 22:27:43 CST
在命令之前加上环境变更的设置,只是临时改变当前执行命令的环境。8) $1,$2…等位置参数的使用假设只想使用$2,$3..这几个参数,常见的做法是:
shiftecho "$@"
为什么不这样写呢?
echo "${@:2}"
9)退而求其次的写法相信大家会有这种需求,当一个参数值没有提供时,可以使用默认值。常见的写法是:
arg=$1 if [ -z "$arg" ]; then arg=0fi
简洁的写法是这样的:
arg=${1:-0}
10)bash特殊参数–的用法假设要用grep查找字符串中是否包含-i,我们会这样尝试:
[Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace $ echo "abc-i" | grep "-i"Usage: grep [OPTION]... PATTERN [FILE]...Try "grep --help" for more information. [Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace $ echo "abc-i" | grep "-i"abc-i
简洁的方法是:
[Sat Nov 03 10:45 PM] [kodango@devops] ~/workspace $ echo "abc-i" | grep -- -iabc-i
bash中–后面的参数不会被当作选项解析。