Shell编程之条件判断和流程控制
来源:互联网 发布:数据库和数据源的关系 编辑:程序博客网 时间:2024/05/21 09:30
流程控制语句
条件式判断语句
1 按照文件类型进行判断
两种判断格式
// 版本1test -e /root/install.log// 版本2 ,推荐使用[ -e /root/install.log ]// eg:[ -d /root ] && echo yes || echo no
2 安装文件权限进行判断
3 两个文件之间进行比较
// 判断硬链接$ ln fork.c /tmp/fork.c// 查看fork.c 的i节点$ ll -i /tmp/fork.c 840026 -rw-rw-r-- 2 test test 658 5月 31 21:10 /tmp/fork.c$ ll -i fork.c840026 -rw-rw-r-- 2 test test 658 5月 31 21:10 fork.c$ [ fork.c -ef /tmp/fork.c ] && echo yes || echo noyes
4 两个整数之间比较
注:在shell编程当中所有的内容都是字符串,这里因为有明确的数值比较参数,所以shell可以自动转换为数值再进行比较
5 字符串的判断
注1:使用变量
进行字符串判断时,必须使用"$variable"
,不能使用 $variable
注2:字符串相等比较中可以使用一个等号来进行字符串相等判断,但因为shell中变量赋值也是一个等号,为了避免歧义和错误使用两个等号最好。
// 做字符串判断$ aa=11$ bb=22$ [ -z "$aa" ] && echo yes || echo nono// 做数值判断$ [ $aa -eq $bb ] && echo yes || echo nono
6 多重条件判断
// 多条件判断$ aa=11$ bb=11$ [ $aa -eq $bb -a $aa -gt 33 ] && echo yes || echo nono
单分支if语句
if [ 条件判断式 ]; then 程序fi// 或者if [ 条件判断式 ] then 程序fi
// 例子1,判断当前用户是否为root#!/bin/bashtest=$(env | grep USER | cut -d"=" -f2)if [ "$test" == "root" ] then echo "Current user is root"fi// 例子2,判断/dev/sd3使用率#!/bin/bashrate=$(df -h | grep sda3 | awk '{print $5}' | cut -d"%" -f1)if [ $rate -gt 80 ] then echo "Warning! /dev/sda3 is full!"fi
双分支if语句
if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立,执行另一个程序fi
// 例子3,判断输入是否为目录#!/bin/bashread -p "Please input a dir: " dir if [ -d $dir ] then echo "$dir is directory" else echo "$dir is not a directory"fi// 例子4,判断apached服务是否启动,未启动则启动// 注:脚本名不能带有httpd字样否则test仍被脚本本身赋值#!/bin/bashtest=$(ps aux | grep httpd | grep -v grep)if [ -n "$test" ] # 这里必须是"$test"而不是$test then echo "$(date) httpd is OK!" >> /tmp/autostart-acc.log else /etc/rc.d/init.d/httpd start &> /dev/null echo "$(date) restart httpd!!" >> /tmp/autostart-err.logfi
多分支if语句
if [ 条件判断式 ] then 条件1成立时,执行程序1elif [ 条件判断式2 ] then 条件2成立,执行程序2...else 当所有条件都不成立时,执行此程序fi
// 例子5,简单计算器#!/bin/bashread -t 30 -p "Please input num1: " num1read -t 30 -p "Please input num2: " num2read -t 30 -p "Please input a operator: " ope if [ -n "$num1" -a -n "$num2" -a -n "$ope" ] then # 判断num1、num2为数字 # 使用sed替换数字为空,如果num1为数字,则test1为空 test1=$(echo $num1|sed 's/[0-9]//g') test2=$(echo $num2|sed 's/[0-9]//g') if [ -z $test1 -a -z $test2 ] then if [ "$ope" == '+' ] then sum=$(($num1+$num2)) elif [ "$ope" == '-' ] then sum=$(($num1-$num2)) elif [ "$ope" == '*' ] then sum=$(($num1*$num2)) elif [ "$ope" == '/' ] then sum=$(($num1/$num2)) else echo "Please input a valid symbol!"; exit 10 fi else echo "Please input a valid value!" exit 11 fielse echo "Please input contents!" exit 12fiecho "$num1 $ope $num2 = $sum"
// 例子6 判断用户输入的是什么文件#!/bin/bashread -p "Please input a filename: " fileif [ -z "$file" ]; then #$file variable is empty echo "Error,please input a filename!" exit 1elif [ ! -e "$file" ]; then echo "Your imput is not file!" exit 2elif [ -f "$file" ]; then echo "$file is a regulare file!"elif [ -d "$file" ]; then echo "$file is a directory!"else echo "$file is an other file!"fi
case语句
case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; ... *) 如果变量的值不等于以上的值,则执行此程序 ;;esac
// 例子7#!/bin/bashread -p "Please choose yes/no: " -t 30 cho case "$cho" in "yes") echo "Your choice is yes!" ;; "no") echo "Your choice is no!" ;; *) echo "Please input correct content!" ;;esac
for循环
for 变量 in 值1 值2 值3 do 程序 donefor (( i=1; i<=100; i=i+1 )) do 程序 done
// 例子8,批量解压压缩文件#!/bin/bashcd /root/test/ls *.tar.gz > ls.logls *.tgz >> ls.logfor i in $(cat ls.log) do tar -zxf $i & > /dev/null done// 例子9,计算和#!/bin/bashs=0for (( i=1; i<=100; i=i+1 )) do s=$(( $s + $i)) doneecho $s// 例子10,批量添加用户#!/bin/bashread -p "Please input user name: " -t 30 nameread -p "Please input the number of users: " -t 30 num read -p "Please input the password of users: " -t 30 passif [ -z "$name" -a !-z "$num" -a !-z "$pass" ]; then y=$(echo $num|sed 's/[0-9]//g) if [ -z "$y" ]; then for ((i=1; i<=$num; i=i+1)) do /usr/sbin/useradd $name$i &>/dev/null echo $pass|usr/bin/passwd --stdin $name$i &>/dev/null done fifi
while循环和until循环
while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,知道条件判断式不成立,循环才会停止。
// 例子11,求和#!/bin/bashi=1s=0while [ $i -le 100 ] do s=$(($s+$i)) i=$(($i+1)) doneecho "The sum is $s"
until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
// 例子12,求和#!/bin/bashi=1s=0until [ $i -gt 100 ] do s=$(($s+$i)) i=$(($i+1)) doneecho "The sum is $s"
参考
慕课网课程-Shell编程之条件判断和流程控制
0 0
- Shell编程之条件判断和流程控制
- Linux之shell编程之条件判断与流程控制
- Shell编程之条件判断与流程控制
- 十二.shell编程之条件判断与流程控制
- Shell编程之流程控制语句(条件判断)
- Linux-shell编程之条件判断与流程控制
- shell变成之条件判断和流程控制
- shell编程(条件判断与流程控制)学习笔记
- shell中的条件判断与控制流程
- Shell脚本(2)之条件测试和流程控制
- Shell编程之判断条件
- shell编程之条件判断
- Shell编程之条件判断
- shell编程之流程控制
- Shell编程之流程控制
- SHELL条件测试和流程控制
- Shell基础(五):条件判断与流程控制
- 【Linux】Shell编程之条件判断
- 关于Angularjs1.x dom ready
- oracle 调用函数
- yo aspnet
- c#实现的去掉头或尾部的指定字符串
- glibc-linux C 标准库函数源码
- Shell编程之条件判断和流程控制
- 我和Google的故事
- HeadFirstJava——2_类与对象
- flume集群搭建
- Linux下线程的调度策略与优先级(二)
- 专题四 · 1004
- 工作顺心才能有更好的未来
- 20个常识之最-不要说你5个都说不出来
- POI2012题解