『linux笔记』Shell编程4:if elif语句,逻辑与逻辑或,for循环,case语句,select循环,case语句,while循环

目录

一、if elif 判断

二、逻辑与逻辑或

三、for循环(名字表循环)

四、select循环

五、case语句

六、while循环

七、总结:


一、if elif 判断

语法格式为:

eg :对以上的一个简单应用。 

#!/bin/sh
# if test then... elif test then... else... fi
if [ -d $1 ]		#其中[]替换了test,判断占位($1)的需要输入的文件是否是目录。
		then
		echo "is a directory!"
elif [ -f $1 ]
		then
		echo "is a file!"
else
		echo "error!"
fi

 运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo7.sh  /home/love  
is a directory!
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo7.sh  /home/love/shelldir/demo1.sh  
is a file!
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ 

二、逻辑与逻辑或

我们使用-a和-o表示逻辑与和逻辑或。eg :对其的一个简单应用。 

#!/bin/sh
#逻辑与 -a(and) ,逻辑或-o(or)
if [ $1 -eq $2 -a $1 = 1 ]	#注意空格,$1和$2相当于占位符。表示第一个参数和第二个参数相等(equal),并且第一个值为1的话。
		then
		echo "param1 == param2 and param1 = 1"
elif [ $1 -ne $2 -o $1 = 2 ]	#注意空格,第一个参数和第二个参数不相等,not equal,
		then
		echo "param1 != param2 or parm1 = 2"
else
		echo "others"
fi

 运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 1 1
param1 == param2 and param1 = 1
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 1 2
param1 != param2 or parm1 = 2
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 3 4
param1 != param2 or parm1 = 2
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo8.sh 3 3
others

三、for循环(名字表循环)

和传统的for循环不太一样。变量表循环,用的不太多。

for... done语句格式:

eg:打印出1-10 

#/bin/sh
#for var in [params] do ... done
for var in 1 2 3 4 5 6 7 8 9 10	#这种for循环,要都写出来,不怎么常用。
do 	
		echo "number is $var"
done

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo9.sh 
number is 1
number is 2
number is 3
number is 4
number is 5
number is 6
number is 7
number is 8
number is 9
number is 10

四、select循环

格式:select 变量 in 列表

eg:简单应用:具体过程我想通过这个例子表达出来,特别的简单。教程中的程序是这样的呢:

#!/bin/sh
# select var in [params] do ... done
select var in "java" "c++" "python" "linux" "php" "c#" "ruby"
do
		break
done
echo "you selected $var"

结果脚本执行的时候出错了,教程中可以执行。显示错误信息如下。

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo10.sh 
demo10.sh: 3: demo10.sh: select: not found
demo10.sh: 4: demo10.sh: Syntax error: "do" unexpected

通过网上查阅资料,修改为如下,第一行命令中的sh改为bash

#!/bin/bash
# select var in [params] do ... done
select var in "java" "c++" "python" "linux" "php" "c#" "ruby"
do
		break
done
echo "you selected $var"

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ bash demo10.sh 
1) java
2) c++
3) python
4) linux
5) php
6) c#
7) ruby
#? 3
you selected python

五、case语句

最后一行的命令也是case,倒着顺序写的。eg:下面一个简单的应用

#!/bin/sh
echo "请从键盘输入一个变量:"
read op   #从外面读取一个变量,(键盘)
case $op in 
	a)
	echo "you selected a";;
	b)
	echo "you selected b";;
	c)
	echo "you selected c";;
	*)
esac

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh 
请从键盘输入一个变量:
a
you selected a
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh 
请从键盘输入一个变量:
b
you selected b
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo11.sh 
请从键盘输入一个变量:
1
error

六、while循环

while语句,格式:

注意:shell中大于,大于等于,小于等于,lt,gt ,ne,ge,le 很对应。应对方法:

大于 -gt       (greater than) 
小于 -lt      (less than) 
大于或等于 -ge      (greater than or equal) 
小于或等于 -le        (less than or equal) 
不相等 -ne    (not equal)

eg:实现从1加到100,

#!/bin/sh
#while test do ... done

num=1	#声明了2个变量,num,sum
sum=0
while [ $sum -le 100 ]	#注意空格,-le表示小于等于
do 	
		sum=`expr $sum + $num` #把右边运算符的结果赋值给左边。expr命令对整数运算
		num=`expr $num + 1`	   ##把右边运算符的结果赋值给左边。
done
echo $sum

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo12.sh 
5050

如果想让程序执行的慢一点的话,可以改成如下:在done下面一行加一个sleep 10 等待5秒。

#!/bin/sh
#while test do ... done

num=1	#声明了2个变量,num,sum
sum=0
while [ $sum -le 100 ]	#注意空格,-le表示小于等于
do 	
		sum=`expr $sum + $num` #把右边运算符的结果赋值给左边。expr命令对整数运算
		num=`expr $num + 1`	   ##把右边运算符的结果赋值给左边。
done
sleep 10
echo $sum

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo12.sh 
5050

 eg:通过加上break,continue条件的例子,这里的continue和break关键字和其他语言java,c++,python中表达的意思都是一样的,知识每一门语言的语法格式可能有些不相同。

#!/bin/sh
i=0 								#生成一个变量i=0
while [ $i -le 100 ]				#循环i<=100,$为取出i的值,注意空格,容易出错。
do 					
	i=`expr $i + 1`					#等号右边的运算i加加,赋值给i.注意空格,容易出错
	if [ $i -eq 5 -o $i -eq 10	]	#判断i等于5,或者i等于10,退出本次循环,注意空格,容易出错。
		then continue;
	else							#否则i不等于5,i不等于10,输出当前i的值是多少。
		echo "this number is $i"
	fi
	if [ $i -eq 15 ]				#如果i的值为15,跳出所有循环。 注意空格,容易出错。
		then break;
	fi
done

运行脚本结果显示如下:

love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo13.sh 
this number is 1
this number is 2
this number is 3
this number is 4
this number is 6
this number is 7
this number is 8
this number is 9
this number is 11
this number is 12
this number is 13
this number is 14
this number is 15

所有程序源码都是手敲出来,有需要可以@我,一起学习。

七、总结:

记录到这里shell编程基本的语法已经大致说完,我本人的理解就是任何一门语言的终极思想都是一样的,其中包括各种程序的设计逻辑,只是每一门语言的语法格式有些差别,要想多熟悉一门语言还需要平时自己多动手,多实践,熟能生巧。

还有一个我认为最重要的就是:一定有一门自己特别特别熟悉的语言,有了这样思想概念之后,再学习任何一门语言都是非常有帮助的,讲到这里就结束了,其中肯定会有很多的不足,希望众师友能给予指出,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI大模型前沿研究

感谢您的打赏,我会继续努力!

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

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

打赏作者

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

抵扣说明:

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

余额充值