shell基础和语法 | 青训营笔记

127 阅读1分钟

分支语句

语法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,函数状态是上一条命令的执行状态,存储在$?中