lv3 嵌入式开发-7 linux shell脚本编程(分支语句、循环语句)

目录

1 分支语句

2 多路分支语句

3 for的用法

4 while的用法

5 循环控制语句

6 练习


1 分支语句

语法结构:

         if    表达式
         		then  命令表
         fi    

如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 if和fi是条件语句的语句括号, 必须成对使用; 命令表中的命令可以是一条, 也可以是若干条。

示例:

//示例1
#!/bin/bash 

read -p "input a filename:" file  //判断文件或者目录是否存在

#test -e $file
#echo $?
if test -e $file                  //等同于 if [ -e $file ],注意空格不能随便删除
then 
	echo "$file exist"            //如果存在文件名或者目录名会输出
fi


//示例2
#!/bin/bash 

read -p "input a filename:" file  //判断文件或者目录是否存在

if test -e $file                  //等同于 if [ -e $file ],注意空格不能随便删除
then                              
	echo "$file exist"            //如果存在文件名或者目录名会输出
else
    echo "$file is not exist"
    echo "please check"
fi


//示例3
#!/bin/bash 
read -p "input a filename:" file  //判断文件或者目录是否存在

if [ -f $file ]                    //是否是普通文件                 
then                               //if 和 elif 都必须加then
	echo "$file is a file"            
elif [ -d $file ]                   //是否是目录
then
    echo "$file is a dir"
else
    echo "$file is not a file or a dir"
fi

 

语法结构:

        if      表达式
        then 命令表1
        else  命令表2
        fi

如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句. 注意: 无论表达式是否为真, 都有语句要执行. 

示例:

判断用户是否存在,如果存在,打印存在,如果不存在,打印不存在。

之前的作法:

其中^正则表达式,代表第一个是linux;wc -l 统计字符,大于0说明存在。

使用脚本写法:

#!/bin/bash 

RET=`grep "^linux:" /etc/passwd | wc -l`
if [ $RET -eq 1 ]                                 
then 
	echo "exist"    	        
else
	echo "not exist"
fi

test命令使用总结

test命令测试的条件成立时, 命令返回值为真(0),否则返回值为假(非0).

2 多路分支语句

多路分支语句case用于多重条件测试, 语法结构清晰自然.  其语法为:

示例:

判断输入的是yes/YES/y/Y 还是no/NO/N/n

#!/bin/bash 

read -p "input yes/no: " val

case $val in
	yes | y)
		echo "input yes"
		;;
    YES | Y)
        echo "input YES"
        ;;
	no | n)
		echo "input no"
		;;
    NO | N)
        echo "input NO"
        ;;
esac

 示例:

#!/bin/bash 

#学生成绩分级管理
#90-100 A
#70-90 B
#60-70 C
#0-59 D

read -p "input score:" val

#-o 或
#-a 与
#! 非
# 等同于if [ $val -gt 100 ] || [ $val -lt 0]  #0-100
if [ $val -gt 100 -o $val -lt 0]  #0-100
then
    echo "input error val"
    exit
fi

val=`expr $val / 10`
case $val in
	9 | 10)
		echo "A"
		;;
    7 | 8)
        echo "B"
        ;;
	6)
		echo "C"
		;;
    *)
        echo "D"
        ;;  #只有最后一个双分号可以省略
esac

3 for的用法

当循环次数已知或确定时,使用for循环语句来多次执行一条或一组命令。格式为:

	for   变量名   in   单词表
    do
           命令表
    done

变量依次取单词表中的各个单词,  每取一次单词, 就执行一次循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。

如果单词表是命令行上的所有位置参数时, 可以在for语句中省略 “in  单词表” 部分。 

示例

#!/bin/bash 

filename=`ls`
for file in $filename 
do
	if [ -f $file ] #可以对文件/目录进行分类管理
	then
		echo "$file is a file"
	else
		echo "$file is not a file"
	fi 
done

“$@” 每个内容是单独的个体

“$*” 是一个整体

//示例1
#!/bin/bash 

for val in $@
do
    echo "$val"
done

//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4


//示例2
#!/bin/bash 

for val in $*
do
    echo "$val"
done

//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4


//示例3
#!/bin/bash 

for val in "$@"
do
    echo "$val"
done


//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1
2
3
4

//示例4
#!/bin/bash 

for val in "$*"
do
    echo "$val"
done


//结果
linux@linux:~/shell$ ./for.sh 1 2 3 4
1 2 3 4
 

示例

#!/bin/bash
#for file in 1 2 3 4 5   下面双括号等同C语言用法
for ((i = 0; i < 5; i = i+1))
do 
    echo "$file"
done

4 while的用法

语法结构为:

while    命令或表达式
   do
         命令表
   done

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。  

while语句的退出状态为命令表中被执行的最后一条命令的退出状态。 

示例

#!/bin/bash

i=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
do
	echo "$i"
	i=`expr $i + 1`
done

5 循环控制语句

break 和 continue 

break  n  则跳出n层;       

continue语句则马上转到最近一层循环语句的下一轮循环上,       

continue  n则转到最近n层循环语句的下一轮循环上.

示例

#!/bin/bash

i=0
#while [ $i -lt 5 ] 
while (( i < 5 ))
do
	echo "$i"
	if [ $i == 3 ]
	then
		break   #跳出本层循环       0 1 2 3
		#continue   #跳出本次循环   0 1 2 3 3 3会一直打印3
	fi
	i=`expr $i + 1`
done

6 练习

将当前目录下的普通文件,归档到hello.tar中;

#!/bin/bash

filename=`ls`
for file in $filename
do
    if [ -f $file ]
    then 
        tar -rf hello.tar $file
    fi
done

计算下5!(5的阶乘)的结果,并打印出来;

#!/bin/bash
i=5
RET=1
while (( i > 1 ))
do
	RET=`expr $RET \* $i `
	i=`expr $i - 1`
done
echo $RET

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

4IOT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值