一个自动编辑文件的shell脚本自己玩的

之前由于自己需要编写大量的xml文件,所以就写了这个脚本,本人不会写脚本,通过这次就学习了脚本的写法,然后记录在这以便随时补充和学习shell脚本的内容,并通过该脚本拓展一下shell中的很多语法,并记录一下awk和tr命令的使用,其他像sed,grep等以后用到时在补充吧

 #!/bin/bash

fn=htlm.xml                        //shell编程中“=”两边不允许出现空格
echo "" >> ${fn}             //fn变量引用时要可以$fn也可以使用${fn}
echo "" >> ${fn}

if [ $# -ne 1 ]
then
    echo "please input file row(column) number"
    exit
fi

for i in $(seq 1 $1)
do
   cnt=$i
   label=`awk -vnvar="$cnt" '{if(NR == nvar) {print $1}}' tmp.xml`
   value=`awk -vnvar="$cnt" '{if(NR == nvar) {print $2}}' tmp.xml`
   echo "${label} ${value}"
   echo "<${label}>${value}" >> ${fn}
done

echo "" >> ${fn}
echo "" >> ${fn}

tmp.xml文件,用来输入key value对

title csdn
style 3
link  a
div  3 

效果展示



csdn

a
3

特殊变量:
一个自动编辑文件的shell脚本自己玩的_第1张图片
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以”$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。

但是当它们被双引号(" “)包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数;" n""@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。

操作符:
一个自动编辑文件的shell脚本自己玩的_第2张图片
一个自动编辑文件的shell脚本自己玩的_第3张图片
一个自动编辑文件的shell脚本自己玩的_第4张图片
一个自动编辑文件的shell脚本自己玩的_第5张图片
if语法:

if [ expression ]   //在expression两端是要有空格的,以上的操作符内容可运用在这里
then
	expression
else
	expression
fi

for语法:

for i in $(seq 1 10)  //for in $(seq 1 2 10): 1起始,2步长,10终点;for ((i = 0; i < 10; i++)) ;for i in 1 2 3 4;for str in "w er t" "a w t"
do
	expression    //里面可以使用continue,break语句
done

awk使用:
使用man手册查看
gawk [ POSIX or GNU style options ] [ – ] program-text file
例子:

awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
awk '{ sum += $1 }; END { print sum }' file
awk -F: '{ print $1 }' /etc/passwd

用到的-F和-v使用的最多,在文件shell脚本中在给awk命令传入变量时总是失败,于是找到了-v参数,然后如脚本程序中使用
awk -vnvar="$cnt" ‘{if(NR == nvar) {print $2}}’ tmp.xml, 使用-v将cnt变量给了nvar,nvar在awk程序中使用,即是cnt值
tr使用:
tr [OPTION]… SET1 [SET2]
-d, --delete: tr -d ';'删除分号
其它的使用的方式没有用过,用时man手册

截图来源
http://c.biancheng.net/cpp/shell/

你可能感兴趣的:(linux应用编程)