变量声明
不声明:shell的变量使用不需要声明直接使用(当然作用域是所以的)。
local:使用local声明的变量是局部的(local只能在function中声明,不能再function外使用,function内使用作用域的函数内,function的变量则不是局部的)。
注意: shell 使用的变量不需要声明,可以直接使用(作用域是所有)。
判断语句
判断语句
if [ 判断条件 ];then
#TODO
fi
注意:if 和 [ 和 判断条件都是有空格的,这个是语法,不按照这样写会出现语法错误。如果是判断数值比较 [ ] 改成使用 (()) 例如 if (( $a>$b));then fi
循环语句:
循环语句
#!/bin/bash
#说明:array 可以是数组;或者字符串使用" "分开的字符串,
#例如:"aa bb cc dd ee"
for i in ${array}
do
#TODO
done
#说明这个读文件是一行行读取文件的
while read line
do
echo $line
#TODO
done < ${file}
流程控制
continue,break
在循环体内可以使用 continue ,break 跳过循环;continue跳过当前循环,break跳出整个循环体
shell数组
shell编程中也可以使用数组,数组的使用时不需要声明
#!/bin/bash
#初始化一个数组
array=("aa" "bb" "cc" "dd" "ee");
#初始化数组并且定义下标,下标可以不是按照顺序,但是下标只能是
array=( [1]="aa" [2]="bbb" [10]="cc");
#如果序号下标可以使是字符串必须这样声明:
declare array;
#设置值
array["mKey"] =val;
#是不是很nice 这样的声明的的数组就是个Map,现在想怎么存就怎么存
数组取值问题:
#!/bin/bash
#获得数组的所以值:
${array[@]}
#获得数组的所以下标:
${!array[*]}
#获得指定下标的值 index就是下标:
${array[$index]}
#数组长度:
${#${array[@]}}
清空数组:unset array
注意:使用数组需要注意的就是以前的以前操作保存的值可能还是会在数组中,所以要清空数组使用
数组的值得遍历
#!/bin/bash
#遍历值
for in ${array[@]}
do
#输出所以的值
echo $i
done
#**遍历下标**
for i in ${!array[*]}
do
#输出 index 和数组的值
echo $i ${array[$i]}
done
字符处理
#!/bin/bash
#字符串的处理需要如果拼接字符串使用
str=$str" "$val
#数值相加:使用 $((...)); 例如: 要使用 a+b 则
$(($a+$b));
function函数
shell编程当然也存在函数的,使用的函数就是可以使得代码得以复用
函数的声明
#!/bin/bash
function fun()
{
#取得参数, $1 表示第一个参数以此类推
echo $1 $2
#获得参数列表的长度
local len=$*
#return 可有可无,无默认最后一个执行结果
return 1;
}
以上的的就是函数的声明
注意:一定要按照上面的格式写函数包括不然语法报错,当然 function 关键字是可以去掉的。
a、函数参数列表:不能想其他语言中声明参数列表 而是通 $1 $2 …这样取得参数。
b、函数的返回值:函数的return 值只能为数值(为什么这样,就要字符呢?return 返回的可以作为判断是否成功的标示1 成功,0失败 和c类似,如果需要返回字符串则可以在return 之前 echo 结果作为返回),不能为其它,字符串。
c、如何需要获得返回 如b中有解释,var=$(fn); 这样调用就能获得echo 的值了,对于return的可以var=fn $1 获得返回值
函数的调用
#!/bin/bash
#如果存在函数 名为 fn的函数如下:
function fn()
{
echo $1;
}
#则调用为: fn 参数1 参数2 ... (注意函数的调用不需要加括号,参数使用空格分开)
shell回调函数
function exectue()
{
#这点的$1 表示是一个函数
$1 "返回值"
}
function callback()
{
echo ">>"$1;
}
#调用,将 callback函数作为参数传入
exectue callback
#这就正常的执行回调了
# 执行的结果是:>>返回值