简洁的bash编程方法
发布时间:2021-11-22 11:56:15 所属栏目:教程 来源:互联网
导读:下面这几条是我自己在写shell代码的时候,比较喜欢的几种写法,抛砖引玉。 1) 检查命令执行是否成功 第一种写法,比较常见: echo abcdee | grep -q abcd if [ $? -eq 0 ]; then echo Found else echo Not found fi 简洁的写法: if echo abcdee | grep -q ab
下面这几条是我自己在写shell代码的时候,比较喜欢的几种写法,抛砖引玉。 1) 检查命令执行是否成功 第一种写法,比较常见: echo abcdee | grep -q abcd if [ $? -eq 0 ]; then echo "Found" else echo "Not found" fi 简洁的写法: if echo abcdee | grep -q abc; then echo "Found" else echo "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 1 2 3 使用Sed命令: [Sat Nov 03 10:14 PM] [kodango@devops] ~/workspace $ sed ':a;$!N;s/n/,/;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 1 1 2 3 常用的方法: [Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace $ sort /tmp/test.txt | uniq 1 2 3 简单的写法: [Sat Nov 03 10:16 PM] [kodango@devops] ~/workspace $ sort /tmp/test.txt -u 1 2 3 6) grep查找单词 假设一个文本的每一行是一个ip地址,例如 [Sat Nov 03 10:20 PM] [kodango@devops] ~/workspace $ cat /tmp/ip.list 10.0.0.1 10.0.0.12 10.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 $ date 2012年 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..这几个参数,常见的做法是: shift echo "$@" 为什么不这样写呢? echo "${@:2}" 9)退而求其次的写法 相信大家会有这种需求,当一个参数值没有提供时,可以使用默认值。常见的写法是: arg=$1 if [ -z "$arg" ]; then arg=0 fi 简洁的写法是这样的: 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 -- -i abc-i bash中–后面的参数不会被当作选项解析。 ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |