分支语句
语法1:
if condition; then 程序段 elif condition; then 程序段 else 程序段 fi
#!/bin/bash
level=0
if [ -n "$level" ]; then
if [ "$level" == 0 ]; then
prefix=ERROR
elif [ "$level" == 1 ]; then
prefix=INFO
else
echo "log level not supported"
fi
fi
echo "[ ${prefix} ] $message"
一个连续判断的例子:
#!/bin/bash
read -p "please input (Y/N) : " yn
if [ "$yn" == "y" -o "$yn" == "Y" ]; then
echo "ok continue"
fi
if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then
echo "ok continue too"
fi
-p:一个提示信息,显示在用户输入之前。
yn:一个变量的名称,用于保存用户输入的值。
-o:Bash shell 中的逻辑 “OR” 运算符,用于将两个或两个以上的条件连接起来,表示只要其中一个条件成立就为真。
语法2:
case $变量 in: "第一个变量内容") 程序段 ;; "第二个变量内容") 程序段 ;; *) echo "404" ;; esac
#!/bin/bash
name=john
case $name in
"nick")
echo "hi nick"
;;
"john")
echo "my name is john"
;;
*)
echo "404"
;;
esac
循环
while循环
while condition ; do 程序段; done
#!/bin/bash
let num=0
while [ $num -lt 10 ];
do
echo "current idx: $num"
((num++))
done
until循环(与while循环完全相反,条件成立的时候跳出循环)
until condition ; do 程序段; done
#!/bin/bash
let num=0
until [ $num -gt 10 ];
do
echo "current idx: $num"
((num++))
done
for循环
for var in [words...]; do 程序段; done
#!/bin/bash
#对列表进行循环
for foo in a b c
do
echo $foo
done
#数值方式循环
for((i=0;i<10;i++))
do
echo $i
done
函数
语法一:
funcName() { echo "abc"; }
语法二:
function funcName() { echo "abc"; }
#!/bin/bash
printName() {
if [ $# -lt 2 ]; then
echo "illegal parameter."
exit 1
fi
echo "firstname is: $1"
echo "lastname is: $2"
}
printName jacky chen
引用函数直接写函数名称,后面不需要小括号,参数直接跟在函数名称之后使用,空格符作为间隔。
注意:
shell自上而下执行,函数必须在使用前定义
函数获取变量和shell script类似,$0代表函数名,后续参数通过$1、$2...获取
函数内return仅仅表示函数执行状态,不代表函数执行结果
返回结果一般使用echo、printf,在外面使用$()、``获取结果
#!/bin/sh
function test() {
local word="hello world"
echo $word
return 10
unset word
}
content=`test`
echo "状态码: $?"
echo "执行结果: $content"
local:在当前作用域中生效,避免污染外部的全局作用域
unset:撤销local变量
如果没有return,函数状态是上一条命令的执行状态,存储在$?中