天天看点

Shell基础语法(下)

for语句

基本格式:

for 变量名 in 条件; do …; done

样例:遍历目录或文件

1

2

3

4

5

6

7

8

9

<code>#!/bin/bash</code>

<code>cd</code> <code>/etc/</code>                 <code>##脚本中如果查询的目录在多级目录下,首先要进入到目录,或者,直接跟绝对路径</code>

<code>for</code> <code>a </code><code>in</code> <code>`</code><code>ls</code> <code>/etc/</code><code>`      </code><code>##遍历目录</code>

<code>do</code>

<code>    </code><code>if</code> <code>[ -d $a ]         </code><code>##一个一个的去判断是否为目录</code>

<code>    </code><code>then</code>

<code>    </code><code>ls</code> <code>-d $a             </code><code>##如果是目录,就查看下目录内的文件和子目录</code>

<code>    </code><code>fi</code>

<code>done</code>

while语句

while 条件; 

do … ;

done

样例:实时监测负载发邮件

10

<code>while</code> <code>:         </code><code>##:表示永远循环,和true一个意思</code>

<code>    </code><code>load=`w|</code><code>head</code> <code>-1|</code><code>awk</code> <code>-F </code><code>'load average: '</code> <code>'{print $2}'</code><code>|</code><code>cut</code> <code>-d. -f1`</code>

<code>if</code> <code>[ $load -gt 10 ]</code>

<code>then</code>

<code>    </code><code>top</code><code>|mail -s </code><code>"load is high: $load"</code> <code>[email protected]  </code><code>##这里也可以执行python发邮件的脚本</code>

<code>fi</code>

<code>sleep</code> <code>30</code>

break

跳出整个循环,执行循环代码后的指令。

continue

跳过本次循环,进行下一轮循环。

exit

退出整个脚本。

函数

function fun(){    ##定义函数

……         

}

fun 1 2 3          ##传入参数,调用函数

变量含义:

$1 : 第一个参数

$2 : 第二个参数

$3 : 第三个参数

$0 : 脚本的本身名称

$# : 传入的参数个数

$@ : 全部参数

样例:查看网卡ip地址

<code>ip() {</code>

<code>    </code><code>ifconfig</code> <code>| </code><code>grep</code> <code>-A1 </code><code>"$e"</code> <code>|</code><code>tail</code> <code>-1 | </code><code>awk</code> <code>'{print $2}'</code>

<code>}</code>

<code>read</code> <code>-p </code><code>"Please input the eth name: "</code> <code>e</code>

<code>myip=`ip $e`</code>

<code>echo</code> <code>"$e address is $myip"</code>

数组

定义:

11

<code># a=(1 2 3)          ##定义一个数组a并赋值 1 2 3</code>

<code># echo ${a[*]}       ##注意输出a的值的格式</code>

<code>1 2 3</code>

<code># echo ${a[1]}       ##输出单个a数组中的值</code>

<code>2</code>

<code># echo ${a[2]}</code>

<code>3</code>

<code># echo ${a[0]}       ##注意第一个其实是 0</code>

<code>1</code>

<code># echo ${#a[@]}      ##获取数组的元素个数</code>

更改:

<code># a[3]=a         ##给第三个数组赋值一个a</code>

<code># echo ${a[*]}</code>

<code>1 2 3 a</code>

<code># a[3]=aaa       ##修改赋值为aaa</code>

<code>1 2 3 aaa</code>

<code>#echo ${a[@]/5/asd}  ##替换</code>

<code>1 2 3 4 asd 6 7 8</code>

删除:

<code># unset a[2]         ##删除a数组中第2位的值</code>

<code># unset a            ##删除a数组</code>

分片:

<code># a=(`seq 1 8`)          ##给a赋值8个数</code>

<code>1 2 3 4 5 6 7 8</code>

<code># echo ${a[@]:3:3}       ##从第3个数组开始,截取3个。</code>

<code>4 5 6</code>

<code># echo ${a[@]:0-3:2}     ##从倒数第三个开始,取两个数</code>

<code>6 7</code>

<code></code>

本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/2064850,如需转载请自行联系原作者