一、数值运算
var=$((运算内容)) 如:var=$((3+3))
二、执行方式
直接执行:sh 、利用绝对/相对路径执行
是在子进程的bash内执行,执行完不会将变量或操作回传给父进程
父进程中执行:source
source 脚本
三、判断符号[]
[ "$HOME" == "$MAIL" ] :使用示例,空白处为空格,必须加
四、默认变量
**执行的脚步文件名为$0变量,第一个接的参数就是$1,以此类推**
例:
/home/admin/startup.sh opt1 opt2 .....
$0 $1 $2 $...
$# : 代表参数个数
$@ : 代表变量内容
$* : 代表变量,例如上述的就是"$1 $2",默认使用空格作分隔符
脚本内容:
#!/bin/bash
echo "The script name is :$0"
echo "Total param number is :$#"
echo "Total param @ :$@"
echo "Total param * :$*"
[ "$#" -lt 2 ] && echo "The param number is $@" && exit 0
echo "The 1st param: $1"
echo "The 2st param: $2"
执行:
rock:script cc$ sh sh02.sh test1 test2
The script name is :sh02.sh
Total param number is :2
Total param @ :test1 test2
Total param * :test1 test2
The 1st param: test1
The 2st param: test2
shift 参数变量号码偏移
shift 不跟数字只偏移1;跟数字n,偏移n
脚本:
#!/bin/bash
echo "The script name is :$0"
echo "Total param number is :$#"
echo "Total param @ :$@"
echo "Total param * :$*"
echo "shift使用了"
shift
echo "Total param @ :$@"
echo "Total param number is :$#"
echo "The script name is :$0"
执行:
rock:script cc$ sh sh03.sh test1 test2 test3
The script name is :sh03.sh
Total param number is :3
Total param @ :test1 test2 test3
Total param * :test1 test2 test3
shift使用了
Total param @ :test2 test3
Total param number is :2
The script name is :sh03.sh
五、条件判断
if…then
if [条件判断]; then
内容
fi
脚本例子:
if [ "$?" == "0" ]; then
echo "命令执行成功"
exit 0
fi
----------
if [条件判断]; then
内容
else
内容
fi
---------
if [条件判断]; then
内容
elif [条件判断]; then
内容
else
内容
fi
脚本例子:
if [ "$?" == "0" ]; then
echo "命令执行成功"
exit 0
elif [ "$?" == "1" ]; then
echo "命令执行失败"
exit 0
else
echo "未知错误"
exit 0
fi
case…esac
case $变量 in
"匹配内容1")
程序内容
;;
"匹配内容2")
程序内容
;;
*)
程序内容
;;
esac
脚本例子:
case $1 in
"hello")
echo "you input hello"
;;
"")
echo "you must input value"
;;
*)
echo "you input $1 ,but need 'hello'"
;;
esac
六、函数function
script的执行方式为从上而下,由左到右,function一定放在程序的最前面。
调用函数时在函数后面跟的值会作为函数的参数被所掉函数拿到,$1表示第一个,$2表示第二个,以此类推
语法:
function fname(){
...
}
例子:
function printHello(){
echo "hello"
}
printHello
---------
function paramtest(){
echo $1
}
paramtest "test b"
屏幕打印出test b
七、循环
while do done
条件满足执行,直到不满足停止
while [条件判断]
do
程序内容
done
条件不满足执行,直到满足停止
until [ 条件判断 ]
do
程序内容
done
脚本例子:
number=0
while [ "$number" -lt 100 ]
do
read -p "input number: " number
done
for…do…done
固定循环:
for var in con1 con2 ...
do
程序
done
例子:
for animal in dog cat pig
do
echo $animal
done
输出:
dog
cat
pig
数值循环
for (( 初始值; 限制值; 执行步长))
do
程序
done
例子:
for(( i=1;i<100;i=i+1))
do
echo $i
done
八、script的追踪与调试
sh [-nvx] 脚本
-n 不执行,查询语法问题
-v 执行前,将脚本内容输出到屏幕
-x 将使用到的脚本内容输出到屏幕