1.1基本语法
#!/bin/bash #指定用于执行的shell
#function description #功能描述
#parameters #参数说明等
echo -e “hello, world\n” #在终端上输出hello, world
1.2 变量相关
赋值操作:
var=hello 解引用 用 $var,如echo $var 将输出hello
declare可以定义变量的类型,如declare –i integerA ,如果把不合理的内容赋给变量的话,那么变量integerA会被设置成0
环境变量:
export 设置环境变量,可以在子shell 中生效(作用就是用于父shell向子shell传递变量)
如export envVar=hello,则其在当前shell及子shell中可见
取消定义的话用unset envVar,且只能在当前shell中取消,子shell中无法取消
查看环境变量的可以通过:env 或set (可列出值)
间接引用:
var1=var2
var2=hello
echo ${!var1} #这个会输出hello
eval temp=\$$var1; echo $temp
与用户交互命令:
读取输入:read –p “commemt” var #输入var的值前输出提示信息
变数:
$0 $1 $@ $* $?等, shift 命令可以进行变量偏移
1.3 判断式:
1) test 命令
option 如下:
A. 判断文件类型相关:
-d 是否是目录
-f 是否是文件
-e 是否存在
B. 判断权限相关:
-w 是否可写
-r 是否可读
C. 两个文件的关系判断:
-nt (new than)
-ot (old than)
D. 整数大小判断:
-eq -ne –gt –lt –ge –le #equal, notequal, greater than, less than, greater than or equal, less than or equal
E. 字符串判断:
test -z string 字符串是否为0
test -n string 字符串是否非0
test str1 = str2 是否相等 #这是= 与== 含义一样
test str1 != str2 不相等
p.s: 进行字符串判断的话最好带双引号
2) []
[]与test是等价的,即test –z string <==> [ -z string ] #注意[]两边要有空格
3) 多重判断(与或非)
-a–o ! #也要有空格,如[ ! –f file ], 表示文件不存在
1.4 条件判断:
1) if语句
if [ condition ];then
else
fi
#可使用逻辑运算符&& || !,如[ “$str1”== a –a “$str2” == b] <==> [ “$str1”== a] && [ “$str2” == b]
if [ condition1 ];then
elif [ condition2 ];then
else
fi
2) case 语句
case $var in
context1) #context建议用双引号括起来,关键词则为双引号
dosomething
;; #这边是两个”;”
context2)
dosomething
;;
*) #相当于default
dodefault;
exit1
;;
esac
注意:context1满足了,就不会执行下面的了
1.5 循环
1) while循环
whie [ condition ]
do
dosomething
done
表示当条件满足时就do something
2) dountil循环
until [condition ]
do
do something
done
表示当条件不满足时就do something
3) for循环
形式1:
for varin con1 con2 con3
do
do something
done
相当于java或c++11中的foreach语句,表示第一次var取con1,第二次去con2,以此类推。
形式2:
for((initial value; condition ; steps)) #如for (i=0;$i<100;i++) #i<100 or $i<100 both ok
do
do something
done
1.6 函数
function fname ()
{
echo$0; #将输出bash
}
注意如果写在同一行的话{}两边要有空格,另外function关键字可省略
小技巧:
function中的return语句只能返回255之内的整数,那函数怎么返回字符串?
ans:用echo str形式即可,例子如下:
function fname ()
{
echo hello;
}
如何执行函数呢,把他当成向ls之类的命令使用就可以了
str=$(fname) or str=`func` bothok ! 则str=hello;
1.7 执行shellscript
source test.sh 同 .test.sh 表示在当前shell上执行
sh test.sh ./test.sh 则会重开一个子shell执行程序
sh –nvxscript.sh
-n 仅检查语法,不实际执行script
-v 执行script前,先将script的内容输出到屏幕上
-x 将使用到的script内容显示到屏幕上 #执行到的语句才会输出