因为项目需要需用shell写一个linux测试脚本,发现网上此类文章十分杂乱,很难在短时间内上手,所以在此写一个bash shell脚本快速入门。其目的在于对于shell bash没有接触过的人可以看完后就可以实现一些简单脚本。
1. #!/bin/bash
需在脚本第一行添加此句,表明用/bin/bash解释器解释脚本
2. 变量赋值与使用
Bash Shell并不区分数据类型,而是把任何存储在变量中的值都当做字符串。所以不需要声明就可以使用变量。
myname=fiverwyp
myname="fiver wyp"
可以不加引号赋值一个变量,但等式右边有空格时必须加引号
另外,等式两边不能有空格!
变量使用时需要在前面添加$
echo $myname
如果不加$则会直接输出字符串myname
echo myname
如果变量和其它字符串之间没有空格,需要用大括号包裹变量名,如下
echo ${myname}ismyname
3. 数组
数组初始化:
A=(0 1 2 3)
数组赋值:
A[0]=1
数组取值:
echo ${A[1]}#1
用变量作为索引来取值:
i=1
echo ${A[$i]} #1
数组长度:
echo ${#A[@]} #4
数组全部取出:
echo ${A[@]} #1 1 2 3
echo ${A[*]} #1 1 2 3
c=(${A[@]})
echo ${c[0]} #1
数组清除:
unset A[0]
4. if
基本结构如下:
if [判断语句];then
#do something
elif
#do other thing
else
#do last thing
fi
需要注意,if与判断语句之间必须有空格!
判断语句有如下几种:
(1)判断数字大小
int1 -eq int2 两数相等为真 int1 -ne int2 两数不等为真 int1 -gt int2 int1大于int2为真 int1 -ge int2 int1大于等于int2为真 int1 -lt int2 int1小于int2为真 int1 -le int2 int1小于等于int2为真
(2)判断字符串是否相等
str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当串str1为非空时为真
5. for
基本结构如下:
array=(1 2 3)
for i in ${array[@]}
do
echo $i
done
比如将$var的第一个空格全部替换成下划线,可以这么写:
${var/ /_}
若是全部空格都替换成下划线
${var// /_}
7. 算术运算
有(()) [] expr let四种方式,比如让m加1
m=$[ m + 1]
m=`expr $m + 1`
m=$(($m + 1))
let m=m+1
8. $?得到命令行输出
有时候需要用到一些命令行,并根据输出进行流程控制,可以用$?指令得到上一次命令行的返回结果,0代表没有错误,1代表有错误。
比如需要判断一个程序是否在运行,可以如下写代码。若不在运行则$?为1,进入if内命令
pgrep function_name
if [ $? -gt 0 ];then
#do something here
fi
9. 脚本传参
在命令行输入scriptName.sh para1 para2 可以向脚本传参,参数之间有空格。$1 $2分别表示第一、二个参数。$@或者$#可取出全部参数,不同的是$@取出的是一个数组,可以for $item in $@ 遍历,$#则是一个字符串。
当不知道参数数量时,可以用$@取出:
i=0
for para in $@
do
parameter[$i]=$para
((i++))
done
更过使用技巧点击这里
http://bbs.chinaunix.net/thread-218853-1-1.html