基础
循环
for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
- awk调用shell命令
实践
1. ‘<’ 的作用
进程代入,可以把命令的执行结果当成文件一样读入 比如comm前一般需要sort 那就可以这样:
comm <(sort 1.lst) <(sort 2.lst)或paste <(cut -t2 file1) <(cut -t1 file1)管道差不多,但是支持多个输入。
2. 为文本添加 BOM 头
方案一(通过VIM加BOM头)
$ echo 'hello' > foo$ xxd < foo0000000: 6865 6c6c 6f0a hello.$ vim -e -s -c ':set bomb' -c ':wq' foo$ xxd < foo0000000: efbb bf68 656c 6c6f 0a ...hello.
方案二 ```
!/bin/bash
add_bom.sh
FILE=$1
check() { if (( e = “$1” )); then echo “ERROR: $ACTION failed!!” exit $e else echo “INFO: $ACTION Success!!” fi }
set_bom() { ACTION=”Setting utf-8 BOM”
# Detect if BOM already existsBOM=`sed -n '1{/^\xEF\xBB\xBF/p}' $FILE`if [ -z $BOM ]; then[ -f "$FILE" ] && /usr/bin/vim -e -s +"set bomb|set encoding=utf-8|wq" $FILEcheck $?fi
}
set_bom
<a name="8auk0"></a>#### 3. 在 awk 中运行 shell 命令拿到执行结果- 方案一: 使用 system 运行 shell 命令
jay@jay-linux:/tmp$ cat data.txt var1 var2 1 2
jay@jay-linux:/tmp$ cat my.sh
!/bin/bash
echo $1
jay@jay-linux:/tmp$ awk ‘{system(“sh my.sh “ $2)}’ data.txt var2 2
- 方案二: getline
$ awk ‘BEGIN{ “date” | getline date; print date; }’ Sun Mar 8 22:21:52 2009
- 方案三: print xxx | "bash"
awk ‘BEGIN{print “df -h”|”bash”}’
- 相关:[1. awk调用shell命令](http://blog.sina.com.cn/s/blog_3ef3b17a0100dzw0.html)<br />[2. 在awk中运行shell命令](http://www.shencan.net/index.php/2012/09/03/%E5%9C%A8awk%E4%B8%AD%E8%BF%90%E8%A1%8Cshell%E5%91%BD%E4%BB%A4/)<a name="ejy1T"></a>#### 4. 显示数据库所有表结构```sqlmysql_stats -N -e "show tables" | xargs -i -t mysql -h10.138.230.23 -uzc_stats -p10419c5976ab82c6 -P3933 zc_stats -N -e "show create table {};" > /tmp/{}.sql
【Xargs用法详解】-t 表示先打印命令,然后再执行。-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。-p 当每次执行一个argument的时候询问一次用户。-0 当sdtin含有特殊字元时候,将其当成一般字符,想/空格等-a file 从文件中读入作为sdtin-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符(例九)
相关:Xargs用法详解
