Linux Shell脚本 变量与流程控制

Shell脚本的创建简单使用

下面所有操作,都是基于一个已经建立好的 1.sh 脚本

变量声明

Shell变量的声明和 python 语言的变量声明类似,即

变量名=值
a=123
a=123
b=456
c="hello world !"

值得注意的是

  • 等于号的前后不能有空格
  • 变量命名规则,要比较规范,不能以下划线,问号什么的开头
  • 变量默认类型是字符串,即使 a=123,a其实是“123”,至于怎么加减,下面细说

变量使用

使用一个变量,不能直接打变量名,因为我们可以把脚本想象成在命令行里打字,我们直接打一个a,系统怎么知道打的是 a 命令 还是调用a变量?

变量的引用,需要在前面加 $,即美元符号,告诉系统这是一个变量,此外,如果使用 ${变量名},即括号括起来,那么会进一步精确化变量的名字,更不容易出错,不过这个括号不是必须的

编写一个简单的脚本验证:

#!/bin/bash

a=123
b=456
c="hello world !"

echo $a+$b
echo $c

在这里插入图片描述
可以看到,a+b并没有产生加法运算,因为默认的变量类型是字符串,而且我们这个 + 号,也是字符串,这里类似C++中宏定义的替换。。。

格式化输出

有时候我们想在变量前面,输出说明字符串,比如 “这个字符串的值是: abc”,abc是某个变量的值,这时候想起printf的好 ,可以使用类似printf的方式,引号也可以去掉,其实也可以理解成简单的宏定义替换

echo "说明语句 $变量名"
echo 说明语句 $变量名

运行这个脚本

#!/bin/bash

a=123
b=456
c="Hello World"

echo "a+b=$a+$b"
echo a+b=$a+$b
echo c is :$c
echo "c is :$c"

在这里插入图片描述

变量的加减乘除

expr语句

使用expr语句以宣告这是一条表达式,注意expr要用 反引号 括起来,和 ~ 是一个键,按shift是 ~,不按是反引号,在ESC下面

`expr $变量a 运算符 $变量b`

修改刚刚的脚本

#!/bin/bash

a=123
b=456
c=`expr $a + $b`

echo $a+$b
echo $c

在这里插入图片描述
再次验证了上面的说法,可以看到第一行是直接 $a+$b,相当于宏定义字符串得到简单替换,第二行使用expr语句,真正做到了加减法,值得注意的是,运算符左右必须有空格

其他运算符

加减乘除

#!/bin/bash

a=123
b=10

echo a + b = `expr $a + $b`
echo a - b = `expr $a - $b`
echo a \* b = `expr $a \* $b`
echo a / b = `expr $a / $b`
echo *

在这里插入图片描述

乘法的转义

值得注意的是,乘法需要用 \* 来转义,直接打 *遍历当前文件夹下的所有文件名,和java的import java.xxx.*;类似,下面这个例子证明了使用 \* 来转义的重要性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关系判断

[ $变量1 == $变量2 ]  :变量1是否  [等于]	变量2, 返回true or false
[ $变量1 != $变量2 ]  :变量1是否 [不等于]	变量2, 返回true or false
[ $变量1 -eq $变量2 ] :变量1是否  [等于]  	变量2, 返回true or false
[ $变量1 -ne $变量2 ] :变量1是否 [不等于]	变量2, 返回true or false
[ $变量1 -gt $变量2 ] :变量1是否  [大于]	变量2, 返回true or false
[ $变量1 -lt $变量2 ] :变量1是否  [小于]	变量2, 返回true or false
[ $变量1 -ge $变量2 ] :变量1是否 [大于等于] 变量2, 返回true or false
[ $变量1 -le $变量2 ] :变量1是否 [小于等于] 变量2, 返回true or false

解释:
eq : equal 等于
ne : not equal 不等于
gt : greater than 大于
lt : less than 小于
ge : greater equal 大于等于
le : less equal 小于等于

if判断语句

if语句和大多数的变成语句类似,只是结束if的 } 变成了 fi,可以理解为final,终结的意思结尾记得加fi

if 条件语句
then
	语句1
	语句2
	...
	语句n
fi

也可以加入else语句

if 条件语句
then
	语句1
	语句2
	...
	语句n
else
	语句1
	语句2
	...
	语句n
fi

演示

执行以下脚本,产生以下输出

#!/bin/bash

a=123
b=124

if [ $a == $b ]
then
        echo a=b
        echo a=b hhhhh
else
        echo a!=b
        echo a!=b AAhhhh
fi

在这里插入图片描述

另一种形式

值得注意的是,用两个括号括住,然后像一般编程语言一样判断,即直接写大于小于符号即可

执行以下脚本,将产生以下输出

#!/bin/bash

a=123
b=124

if (($a < $b))
then
        echo a=b
        echo a=b hhhhh
else
        echo a!=b
        echo a!=b AAhhhh
fi

在这里插入图片描述

循环语句

while语句

同if类似,结束的 } 被替换为 done

while 条件
do
	语句1
	语句2
	...
	语句n
done

还记得刚刚创建了5个txt吗,我们循环删除他们,删除的同时打印当前目录下的文件,执行以下脚本,产生以下输出

#!/bin/bash

ls

i=1

while (($i <= 5))
do
        rm $i.txt
        i=`expr $i + 1`
        ls
done

在这里插入图片描述

关于自增,其他的详细方法

i=`expr $i + 1`
let i+=1
let "i++"
((i++))

for语句

枚举迭代变量

通过枚举 v1,v2,来实现循环

for 迭代变量 in v1 v2 v3 ... vn
do
	语句
	...
	语句
done
#!/bin/bash

for i in 1 2 3
do
        echo $i
        let "i++"
done

在这里插入图片描述

for+seq序列实现循环

seq语句:(别忘了反引号)

`seq 首项 公差 末项`

执行以下脚本,产生以下输出

#!/bin/bash

for i in `seq 0 2 8`
do
        echo $i
done

在这里插入图片描述

发布了262 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44176696/article/details/105232658