shell语句块

if-elif-else-fi

用法(方括号为可选部分)

if
    条件
then
    结果
[
elif
    条件
then
    结果
]
[
else
    结果
]
fi

例子

#!/bin/bash
if
        ls | grep 'demo.log'
then
        echo 'found demo.log'
elif
        ls | grep 'test'
then
        echo 'found test'
else
        echo 'not found'
fi

case语句

用法

case $1 in
条件一)
    结果
    ;;
条件二)
    结果
    ;;
*)
    结果
    ;;
esac

例子

#!/bin/bash
case $1 in
"hello")
    echo "this is hello"
    ;;
"world")
    echo "this is world"
    ;;
*)
    echo "please input hello or world"
    ;;
esac

for语句

带列表

for
    variable in {list}
do
    做处理
done

例子

#!/bin/bash
for i in $1
do
        echo $i
done

不带列表

for variable
do
    做处理
done

例子

#!/bin/bash
for argument
do
        echo "$argument"
done

类c风格

for((i=variable;i<=variable;i++))
do
    做处理
done

例子

#!/bin/bash
for ((i=1;i<=10;i++))
do
        echo $i
done

while与until循环

while用法

while
    条件
do
    做处理
done

while例子

#!/bin/bash
i=1;
while((i<=$1))
do
        echo $i;
        let "i+=1";
done

until用法(注意是条件为假的时候才会执行)

until
    条件
do
    做处理
done

until例子

#!/bin/bash

i=0

until [[ "$i" -gt 5 ]]
do
    let "square=i*i"
    echo "$i * $i = $square"
    let "i++"
done

break与continue(分别是退出循环和结束本次循环)

#!/bin/bash
for ((i=1;i<10;i++))
do
        if
                test $i = 1
        then
                continue
        elif
                test $i = 6
        then
                break
        else
                echo $i
        fi
done

select结构

它是bash的扩展结构用于交互式菜单显示,功能类似于case结构比case的交互性要好

select用法

select variable in list
do
    做处理
    break
done

例子

select number in "1" "2" "3" "4"
do
        break
done
echo "you have select $number"

函数

例子

#!/bin/bash
function a {
        echo 'test'
}
a #函数引用

#!/bin/bash
b() {
        echo 'test12'
}
b #函数引用

test[主要用来测试文件属性,比较字符串及比较数字]

运算符                    如果...则为真
string                   string不是null
-b file                  file为块设备
-c file                  file为字符设备
-d file                  file为目录
-e file                  file存在
-f file                  file为一般文件
-g file                  file有设置它的setgid位
-h file                  file为符号链接(与-L 同)
-k file                  file设置了粘滞位(sticky bit)
-L file                  file为符号链接(与-h同)
-O file                  file用户拥有该文件
-p file                  file为命名管道
-r file                  file(对用户)可读
-s file                  file不是空的(长度大于0字节)
-S file                  file存在且为套接字(socket)
-t fd                    file描述符与终端相关联
-u file                  file属性位set-user-id置1
-w file                  file(对用户)可写
-x file                  file(对用户)可执行
-n string                字符串是非null (长度大于0字节)
-z string                字符串为空(长度为0字节)
expr1 -a expr2           两个表达式皆为真(逻辑与)
expr1 -o expr2           两个表达式至少有一个为真(逻辑或)
file1 -nt file           第一个文件比第二个文件新(利用修改时间戳比较)
file1 -ot file           第一个文件比第二个文件旧(利用修改时间 戳比较)
file1 -ef file           两个文件由链接关联在一起(硬链接或符号链接)
var1 = var2              第一个字符串与第二个字符串相同
var1 != var2             第一个字符串与第二个字符串不相同
var1 -eq var2            第一个整数与第二个整数相等
var1 -ne var2            第一个整数不等于第二个整数
var1 -lt var2            第一个整数小于第二个整数
var1 -le var2            第一个整数小于或等于第二个整数量
var1 -gt var2            第一个整数大于第二个整数
var1 -ge var2            第一个整数大于或等于第二个整数

例子

#!/bin/bash
num1=100
num2=100

if
        test $[num1] == $[num2]
then
        echo 'equal'
else
        echo 'not equal'
fi

expr

计算整数变量值,需要注意的是expr与操作数据,以及操作数据与运算符之间都需要用空格隔开

例子(直接在终端运行)

s=`expr 2 + 3`
expr $s \* 3

或者(一步计算)

expr `expr 2 + 3` \* 4

let

计算整数变量值,需要注意的是运算符与操作数据之间不必用空格分开,但表达式与表达式之间必须要用空格分开

例子

let s=(2+3)*4
echo $s

shift

使位置变量下移一位($2代替$1、$3代替$2,并使$#变量递减),当最后一个参数显示给用户,$#会等于0,$*也等于空

例子

#!/bin/bash
while [[ "$*" != "" ]]
do
        echo "$1"
        shift
done

getopts

可以获取用户在命令下的参数,然后根据参数进行不同的提示或者不同的执行
./test.sh -a hello
getopts一共有两个参数,第一个是-a这样的选项,第二个参数是 hello这样的参数
选项之间可以通过冒号:进行分隔,也可以直接相连接,:表示选项后面必须带有参数,如果没有可以不加实际值进行传递比如输入./test.sh -c 不会报错,但是输入./test.sh -a会报错

例子

#!/bin/bash
while getopts "ca:b:" opt;
do
case $opt in
        a)
                echo "this is -a the arg is $OPTARG"
                ;;
        b)
                echo "this is -b the arg is $OPTARG"
                ;;
        c)
                echo "this is -c"
                ;;
esac
done
坚持原创技术分享,您的支持将鼓励我继续创作!