shell脚本的一些用法总汇

1.shell数组的使用

赋值:all=(6 5 4 3 1 8  9 10)   #一对括号表示是数组,数组元素用“空格”符号分割开。
取长度:num=${#a[*]}   #  ${#a[*或@]}  
取元素:member=${a[2]}     # 用${数组名[下标]} 下标是从0开始  下标是:*或者@ 得到整个数组内容
打印所有元素:echo  ${a[*]} #
删除某个元素:unset  a[3] #删除第四个元素
替换某个元素:a=(${a[*]/3/125}) #找到值为 3 的元素,并替换成 125
分片: echo ${a[@]:3:2} #打印从第四元素开始的两个元素

2.awk数组的操作

<1>建立数组
array[index] = value :数组名array,下标index以及相应的值value。

<2>读取数组值
{ for (item in array)  print array[item]} # 输出的顺序是随机的

{for(i=1;i<=len;i++)  print array[i]} # Len 是数组的长度

<4>删除数组或数组元素: 使用delete 函数
delete array                     #删除整个数组

delete array[item]           # 删除某个数组元素(item)
<5>多维数组
???

3.shell参数问题

$#   参数的个数

$*  或$@  所有的参数

$1 $2: 代表第一个、二个参数(参数从1开始数的)

获取最后一个参数:${!#}

嵌套获取某个参数:

a="cd"

cd="hellofroma"

echo ${!a}  #会打印 “hellofroma”

4.awk中如何输出单引号

最近在用awk拼写一段sql语句时,遇到了 单引号不能输出的 问题 。
实在让人很困惑 !
awk中如何输出单引号 如何在awk中打印输出单引号呢 shell如何处理单引号呢 ?
也就是shell中对单引号的处理问题


解决办法
awk '{print " '\'' "}'
把转义的单引号',用两个单引号括起来,使其不执行


原因是 :括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串输出.


那么shell如何处理特殊字符的呢
1. 单引号 ( ' ' )
如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件
howard@0[script]$ grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符
2. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字符串,经常会用到双引号。
howard@0[script]$ x=*
howard@0[script]$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
howard@0[script]$ echo '$x'
$x
howard@0[script]$ echo "$x"
*
这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。
对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下:
shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数
3. 反引号(``)
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
howard@0[script]$ echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
howard@0[script]$ echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script.
4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。

转接:http://www.cnblogs.com/rootq/articles/1417138.html

5.awk、 shell字符串连接的方法

awk :

http://www.cnblogs.com/chengmo/archive/2010/10/09/1846639.html

shell:

http://www.cnblogs.com/wangkangluo1/archive/2012/06/13/2548636.html








你可能感兴趣的:(shell脚本的一些用法总汇)