Shell编程基础语法(下篇)条件判读,流程控制,函数

上文 https://blog.csdn.net/weixin_44284599/article/details/104662683

6. 条件判断

6.1基本语法

 [ condition ](注意 condition 前后要有空格) #非空返回 true,可使用$?验证(0 为 true,>1 为 false)
  [ atguigu ] 返回true
  [] 返回false

6.2常用判断条件

1)两个整数的比较
    =       字符串比较
    -lt     小 于
    -le     小于等于
    -eq     等 于
    -gt     大 于
    -ge     大于等于
    ne 不等于
2) 按照文件权限进行判断
    -r      有读的权限  [ -r  文件  ]
    -w      有写的权限
    -x      有执行的权限
3)按照文件类型进行判断
    -f      文件存在并且是一个常规的文件
    -e      文件存在
    -d      文件存在并是一个目录

6.3实例

案例 1:"ok"是否等于"ok"
    if [ "ok" = "ok" ]
    then
            echo "equal"
    fi
    
案例 2:23 是否大于 22
    if [ 23 -gt 22 ]
    then
            echo "大于"
    fi
    
案例 3:/root/install.log 目录中的文件是否存在
    if [ -e /root/shell/aaa.txt ]
    then
            echo "存在"
    fi
[root@Centos7 shell]# ./if.sh
    equal
    大于
    存在

7.流程控制

7.1if 判断

基本语法
    if [ 条件判断式 ];
    then 程序
    fi
    if [ 条件判断式 ]
    then
    程序
    elif [条件判断式]
    then 程序
    fi
 
实例:判断参数列表第一个数字是否大于60
    if [ $1 -ge 60 ]
    then echo "及格了"
    elif [ $1 -lt 60 ]
    then echo "不及格"
    fi

注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式

7,2case 语句

基本语法
    case $变量名 in
    "值 1") 如果变量的值等于值 1,则执行程序 1
    ;;
    "值 2") 如果变量的值等于值 2,则执行程序 2
    ;;
    …省略其他分支…
    *)
    如果变量的值都不是以上的值,则执行此程序
    ;;
    esac
实例:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出  "other"
    case $1 in
    "1") echo "周一";;
    "2") echo "周二";;
    *) echo "other";;
    esac

#### 7.3for循环
shell 基本语法 1 for 变 量 in 值 1 值 2 值 3… do 程序 done 基本语法 2 for (( 初始值;循环控制条件;变量变化 )) do 程序 done 案例 1 :打印命令行输入的参数 【会使用到$* $@】 for i in "$*" do echo "the num is $i" done for j in "$@" do echo "the num is $j" done [root@Centos7 shell]# ./pro.sh 1 2 3 4 the num is 1 2 3 4 the num is 1 the num is 2 the num is 3 案例 2 :从 1 加到 100 的值输出显示 SUM=0 for ((i=1;i<=100;i++)) do SUM=$[$SUM+$i] done echo "sum=$SUM"

7.4while 循环

基本语法 
    while [ 条件判断式 ]
    do
    程序
    done
案例 1  :从命令行输入一个数 n,统计从 1+..+ n  的值是多少?
    SUM=0
    i=0
    while [ $i -le $1 ]
    do SUM=$[$SUM+$i]
       i=$[$i+1]
    done
    echo "sum=$SUM"

8. read 读取控制台输入

基本语法
    read(选项)(参数)
选项:
    -p:指定读取值时的提示符;
    -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
    
案例:读取控制台输入一个 num 值,在 10 秒内输入
    read -t 10 -p "请输入一个数num1=" NUM
    echo "你输入的值是num=$NUM"

9.函数

9.1系统函数

9.1.1basename

基本语法
    basename [pathname] [suffix]    返回完整路径最后 / 的部分,常用于获取文件名
    basename [string] [suffix]  (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
    选项:
    suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
实例
    [root@Centos7 shell]# basename /home/aaa.txt
    aaa.txt
    [root@Centos7 shell]# basename /home/aaa.txt .txt
    aaa

9.1.1dirname

功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
实例:
    [root@Centos7 shell]# dirname /home/aaa/test.txt
    /home/aaa

9.2自定义函数

基本语法
    [ function ] funname[()]
    Action; [return int;]
    }
应用实例
    function getSum(){
        SUM=$[$n1+$n2]
        echo "sum=$SUM"
    }
    read -p "请输入第一个数n1:" n1
    read -p "请输入第一个数n2:" n2
    getSum $n1 $n2

10.Shell 编程综合案例

需求分析
 1)每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
 2)备份开始和备份结束能够给出相应的提示信息
 3)备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2018-03-12_230201.tar.gz
 4)在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
代码实现

猜你喜欢

转载自www.cnblogs.com/yue1234/p/12416343.html
今日推荐