> shell编程 >

shell 数组(for循环、while)

好久不写脚本了,最近写awk比较多,今天发现好多基本的忘记了,就写个测试的(今天用了while),调试老报错,弄迷糊了。。。因为awk里面的语法跟c差不多,而shell里面的则是乱七八糟的,好多也记不住了,丢人。。。
----------------------------------------------------------------------------------------------
#!/bin/bash
i=1
#while ($i < "10" )//awk里面是这样,shell不行,**了。。。
#while [ $i < "10" ]//这样写不对,无法识别“10”。
while [ $i -le "10" ]
do
#i=`${i}+1` //这样写不对,要么用expr。
i=$((${i}+1))
#i+=$((${i}+1))//这样写也可以
done
echo $i
exit
----------------------------------------------------------------------------------------------
字符串相等比较 一般用 =
字符串大于比较 > ( [ ]结构中要转义成\>)
字符串小于比较 < ( [ ]结构中要转义成\<)
模式匹配 ==
正则表达式匹配 =~
整数相等比较 -eq
整数大于 -gt
整数小于 -le
[ -d /opt/db_back ]等等,test表达式。等我找到全的test,贴出来给大家看。
-----------------------------------------------------------------------------------------------------------------------------------
[root@CMS1 log]# cd /cmspic/uploadfiles/xml/2012/1/
1/  10/ 11/ 12/ 2/  3/  4/  5/  6/  7/  8/  9/ 
[root@CMS1 log]# cd /cmspic/uploadfiles/xml/2012/1/12/
[root@CMS1 12]# ls
abook_0010b435-bd3f-4b9f-bd3b-9d109db3d07e.xml  abook_5dffce1e-2fcd-4c70-b660-0c9d0e1e3e08.xml  audiobook  mobile
abook_0e68e1d2-1c9c-4f5b-991b-dade277db357.xml  abook_9ab7553e-ca47-40a7-85d3-5897d658305b.xml  ebook      series
[root@CMS1 12]# grep "伸冤记" *
[root@CMS1 12]# find . -type f | xargs grep -l "伸冤记"
./mobile/MoviesXml_6109c33b-4aaf-4a2f-8378-aee617256e77.xml
[root@CMS1 12]#
----------------------------------------------------------------------------------------------
-bash-3.2$ cat fffor.sh
#!/bin/bash
xml=$(ls /home/kaige/audiobook)
for var1 in ${xml}
do
echo ${var1}
mv ${var1} ${var1}yk
done

----------------------------------------------------------------------------------------------
-bash-3.2$ cat fffor.sh | grep "(*)"
xml=$(ls /home/kaige/audiobook)
-bash-3.2$


--------------------------------------------
下面的是以前写在别的地方的博客,弄回来了。
1.

#!/bin/bash
#ip=(ip1 ip2 ip3)
for i in ip1 ip2 ip3
do
echo ssh root@$i
#/opt/apache2/conf/apachectl restart &

echo "已重启$i apache 服务"
done
exit

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.

[root@testcms tbird]# cat ceshi412
#!/bin/bash
ip=(ip1 ip2 ip3)  //数组
for i in ${ip[@]}  //数组
do
echo ssh root@ $i
#/opt/apache2/conf/apachctl restart &
done
echo "已重启${ip[@]} apache 服务"
exit

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3.

#!/bin/bash
ip=(ip1 ip2 ip3)
/opt/apache2/conf/apachectl restart &
duankou=`netstat -tnl | grep 80`
if ["$duankou" -eq 1 ];then
sleep 5
echo "已重启本地apache!"
elif
echo "本地apache重启失败!"
fi
for i in ${ip[@]}
do
ssh root@$i
/opt/apache2/conf/apachectl restart &
done
echo "已重启$ip apache 服务!"
exit

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4.

#!/bin/bash
ip=(ip1 ip2 ip3)
#for i in ${ip[@]}
j=${#ip[@]}
for((i=0;i
do
echo ssh root@${ip[i]}
#/opt/apache2/conf/apachelt restart &
echo "已重启$((i+1)) apache 服务"
done
exit



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
array

Bash中还可以使用数组变量,其赋值有两种:

(1) name = (value1 ... valuen) 此时下标从0开始
(2) name[index] = value

数组下标的范围没有任何限制,同时也不必使用连续的分量.
--------------------------------------------------------------------------------
$ A=(a b c def)
----------------------------------------------------------------------------------------------$ echo ${A[@]} //取全部元素
a b c def
--------------------------------------------------------------------------------------------- $ echo ${A[0]} //取第一个元素
a
----------------------------------------------------------------------------------------------//取得数组元素的个数
$ echo ${#A[@]}
4
$ echo ${#A}
4
$ echo ${#A[3]} //取得元素3的长度
$
----------------------------------------------------------------------------------------------$ A[3]=yaoshuyin //将第三个元素重新赋值
$ echo ${A[@]}
a b c yaoshuyin
----------------------------------------------------------------------------------------------//清除变量
$ unset A
$ echo ${A[@]}
$
----------------------------------------------------------------------------------------------//清空变量,即将值变为空
$ A=
$ echo ${A[@]}
$
----------------------------------------------------------------------------------------------A=B
B=C
unset $A 事实上所取消的变量是 B 而不是 A



-------------------------------  while ---------------------------------------------------
#建立数组
arrSource=("arrJobs.php" "arrSubHangye.php" "arrFirst.php" )

arrDest=("buildhr" \
"buildtrain/htdocs" \
"bankhr" \
"healthr" \
"elehr" \
)

#取数组无元素个数
lenArrSource=${#arrSource
}
lenArrDest=${#arrDest
}


#循环列出数组元素
i=0
while [ $i -lt $lenArrSource ]
do
echo ${arrSource[$i]}
let i++
done


i=0
while [ $i -lt $lenArrDest ]
do

echo ${arrDest[$i]}
let i++
done


-----------------------------------for---------------------------------------------------
#源文件
arrSource=("/home/800hr/htdocs/login_jump.php")

#目标网站
arrDest=(ithr elehr buildhr bankhr healthr ctvhr chenhr mechr clothr cneduhr 56hr tourhr foodhr greenhr cnlawhr waimaohr)

for outer in ${arrSource}
#${arrSource
} 是数组中的所有元素
do
for inner in ${arrDest
}
do
echo "ln -s $outer /home/${inner}/campus/"
done
done
----------------------------------------------------------------------------------------------


(责任编辑:IT)