什么是Linux脚本
1.Linux脚本是一种命令序列,使用脚本可以自动化执行一系列的操作。 它们经常用于自动化重复的任务和批量处理任务。在Linux中,脚本是由一系列命令组成的纯文本文件,其中包含一些特定的脚本语言格式。
2.脚本文件通常以.sh 为扩展名,要让脚本文件能够执行,需要为其设置执行权限
Linux 优点跟缺点
优点:
1.减少动手能力:可以自动化一系列操作,从而减少动手操作
2.灵活性:脚本可以针对不同的需求进行编写,可以根据需要进行修改或扩展,因此具有很高的灵活性
3.方便管理:脚本是纯文本文件,容易进行版本控制、备份、修改和分享。
4.节省时间:脚本可以快速、准确地执行多个任务,从而节省时间和人力。
缺点:
1.可读性差:某些复杂的脚本可能难以理解,使得维护变得困难。
2.安全性问题:需要注意脚本的安全性,因为脚本可以执行任何命令,所以需要确保它不会对系统带来损害。
3.需要经常更新:随着系统和软件版本的更新,脚本也需要不断更新以保持兼容性和可用性。
关系运算符:
-eq
|
检测两个数是否相等,相等返回
true
。
[ $a -eq $b ]
返回
false
。
|
-ne
|
检测两个数是否不相等,不相等返回
true
。
[ $a -ne $b ]
返回
true
。
|
-gt
|
检测左边的数是否大于右边的,如果是,则返回
true
。
[ $a -gt
$b ]
返回
false
。
|
-lt
|
检测左边的数是否小于右边的,如果是,则返回
true
。
[ $a -lt
$b ]
返回
true
。
|
-ge
|
检测左边的数是否大于等于右边的,如果是,则返回
true
。
[ $a
-ge $b ]
返回
false
|
-le
|
检测左边的数是否小于等于右边的,如果是,则返回
true
。
[ $a
-le $b ]
返回
true
|
PS: eq: equql
平等的,相等的
|
|
gt: greater
较大的,大于
|
|
lt: less then
小于
|
#!/bin/bash
if [ $1 -eq $2 ]
then
echo "$1 -eq $2 : $1 等于 $2"
else
echo "$1 -eq $2 : $1 不等于 $2"
fi
if [ $1 -ne $2 ]
then
echo "$1 -ne $2 : $1 不等于 $2"
else
echo "$1 -ne $2 : $1 等于 $2"
fi
if [ $1 -gt $2 ]
then
echo "$1 -gt $2 : $1 大于 $2"
else
echo "$1 -gt $2 : $1 不大于 $2"
fi
if [ $1 -lt $2 ]
then
echo "$1 -lt $2 : $1 小于 $2"
else
echo "$1 -lt $2 : $1 不小于 $2"
fi
if [ $1 -ge $2 ]
then
echo "$1 -ge $2 : $1 大于或等于 $2"
else
echo "$1 -ge $2 : $1 小于 $2"
fi
if [ $1 -le $2 ]
then
echo "$1 -le $2 : $1 小于或等于 $2"
else
echo "$1 -le $2 : $1 大于 $2"
fi
shell脚本
if
if
语句通常由一个条件表达式和一个或多个命令组成。当条件表达式为真时,将执行if
语句后跟的命令;否则将执行else
关键字后跟的命令(如果存在)。
例:脚本内容
#!/bin/bash
echo "请输入一个数字:"
read num
if [[ "$num" =~ ^[0-9]+$ ]]; then
if [ "$num" -gt 0 ] && [ "$num" -lt 10 ]; then
echo "输入的数字是一位数。"
elif [ "$num" -ge 10 ] && [ "$num" -lt 100 ]; then
echo "输入的数字是两位数。"
elif [ "$num" -ge 100 ] && [ "$num" -lt 1000 ]; then
echo "输入的数字是三位数。"
else
echo "输入的数字大于等于1000或小于等于0。"
fi
else
echo "输入的不是一个有效的数字。"
fi
~
2.执行脚本
[root@mysql test]# sh user.sh
请输入一个数字:
1
输入的数字是一位数。
[root@mysql test]# sh user.sh
请输入一个数字:
10
输入的数字是两位数。
[root@mysql test]# sh user.sh
请输入一个数字:
100
输入的数字是三位数。
[root@mysql test]# sh user.sh
请输入一个数字:
-10
输入的不是一个有效的数字。
[root@mysql test]# sh user.sh
请输入一个数字:
1000
输入的数字大于等于1000或小于等于0。
[root@mysql test]# sh user.sh
请输入一个数字:
0.2
输入的不是一个有效的数字。
if...then
是Bash Shell中常见的条件语句之一,用于根据某个条件来执行不同的命令
注意:if...then
语句后面的命令部分可以包含多条命令,使用分号将多个命令隔开即可。
例:脚本内容
#!/bin/bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2
if [ $num1 -gt $num2 ]
then
echo "$num1 大于 $num2"
elif [ $num1 -lt $num2 ]
then
echo "$num1 小于 $num2"
else
echo "$num1 等于 $num2"
fi
执行脚本
[root@mysql test]# sh user1.sh
请输入第一个数字: 10
请输入第二个数字: 20
10 小于 20
[root@mysql test]# sh user1.sh
请输入第一个数字: 20
请输入第二个数字: 10
20 大于 10
[root@mysql test]# sh user1.sh
请输入第一个数字: 10
请输入第二个数字: 10
10 等于 10
if...else
Linux Shell脚本中,
if...else
语句用于根据某个条件来执行不同的命令
注意:在if
和else
语句的每个命令之后都必须以fi
来结束if...else
语句,否则代码将不能正确执行。
例子:
脚本内容
#!/bin/bash
echo "请输入第一个人的年龄: "
read age1
echo "请输入第二个人的年龄: "
read age2
if [ $age1 -gt $age2 ]
then
echo "第一个人年龄更大。"
else
echo "第二个人年龄更大。"
fi
~
执行脚本
[root@mysql test]# sh user2.sh
请输入第一个人的年龄:
10
请输入第二个人的年龄:
15
第二个人年龄更大。
[root@mysql test]# sh user2.sh
请输入第一个人的年龄:
18
请输入第二个人的年龄:
11
第一个人年龄更大。
if/elif/else判断结构
if…elif…else
结构是用于在Shell脚本中进行多重条件判断的语句结构
注意:需要注意的是,在使用if…elif…else
结构时,要按照先后顺序进行判断,即先判断第一个条件是否成立,如果成立则执行对应的命令并结束整个结构;如果不成立,则继续判断下一个条件,直到某个条件成立为止
例子:
脚本内容
#!/bin/bash
echo "请输入一个数字: "
read num
if [ $num -gt 0 ]
then
echo "输入的数字是正数。"
elif [ $num -lt 0 ]
then
echo "输入的数字是负数。"
else
echo "输入的数字是零。"
fi
~
执行脚本
[root@mysql test]# sh user3.sh
请输入一个数字:
0
输入的数字是零。
[root@mysql test]# sh user3.sh
请输入一个数字:
10
输入的数字是正数。
[root@mysql test]# sh user3.sh
请输入一个数字:
-10
输入的数字是负数。
[root@mysql test]#
case判断结构
case 命令是 Shell 脚本中的一种条件语句,用于对变量值进行匹配并根据不同匹配结果执行相应的操作
例子:
脚本内容:
#!/bin/bash
echo "请输入一个数字"
read num
case $num in
1)
echo "你输入了 1"
;;
2|3)
echo "你输入了 2 或 3"
;;
[4-9])
echo "你输入了大于等于 4 的数字"
;;
*)
echo "输入错误"
;;
esac
执行脚本:
[root@mysql test]# sh user4.sh
请输入一个数字
1
你输入了 1
[root@mysql test]# sh user4.sh
请输入一个数字
2
你输入了 2 或 3
[root@mysql test]# sh user4.sh
请输入一个数字
4
你输入了大于等于 4 的数字
[root@mysql test]# sh user4.sh
请输入一个数字
6
你输入了大于等于 4 的数字
[root@mysql test]# sh user4.sh
请输入一个数字
10
输入错误
注意:在 case 命令中,分支选项可以是单个字符(比如 1),可以是多个字符或字符串(比如 2|3),也可以是范围(比如[4-9])。而最后一个 * 分支则是通配符,表示没有匹配到任何分支时执行。
function功能
函数可以在 shell script 当中做出一个类似自订执行指令的东西,最大的功能是, 可以简化我们很多的程序码。如果输出的内容都一样,那么我就可以使用 function 来简化了! function 的语法注意: 因为 shell script 的执行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的设置一定要在程序的最前面, 这样才能够在执行时被找到可用的程序段喔
例子:脚本内容
#!/bin/bash
read -p "请输入你要查询的装备类别:" INPUT
read -p "请输入装备的分数:" SCORE
function fenshu () {
if [ $SCORE -le 30 ];then
echo "品相极品渣!"
elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then
echo "渣渣!"
elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then
echo "嗯,这才像个样!"
elif [ $SCORE -gt 95 ];then
echo "谁与争锋!"
else
echo "输入有误!"
fi
}
function chongzhu () {
read -p "请问是否选择重铸!Y/N" YN
if [ $YN == Y ];then
read -p "好的,用户选择重铸"
elif [ $YN == N ];then
echo "用户不重铸,886!"
else
echo "输入有误!"
fi
}
case $INPUT in
头盔)
fenshu;chongzhu;;
大剑)
fenshu;chongzhu;;
胸甲)
fenshu;chongzhu;;
*)
echo "没有这个装备";;
esac
~
执行脚本
[root@mysql test]# sh user8.sh
请输入你要查询的装备类别:头盔
请输入装备的分数:50
渣渣!
请问是否选择重铸!Y/NY
好的,用户选择重铸
[root@mysql test]# sh user8.sh
请输入你要查询的装备类别:胸甲
请输入装备的分数:100
谁与争锋!
请问是否选择重铸!Y/NN
用户不重铸,886!
[root@mysql test]#
while循环、until do done(不定循环)
while
Linux中的while循环可以用于执行一系列重复的命令,直到条件不再成立。
while [ condition ] //状态的判读do //循环的开始commanddone //循环的结束while 的中文是 “ 当 .... 时 ” ,所以,这种方式说的是 “ 当 condition 条件成立时,就进行循环,直到 condition 的条件不成立才停止 ” 的意思
例子 :脚本内容
#!/bin/bash
n=1
while [ $n -le 10 ]
do
echo "$n"
n=$((n+1))
done
~
执行脚本
[root@mysql test]# sh user5.sh
1
2
3
4
5
6
7
8
9
10
untile循环
Linux中的until循环与while循环类似,只不过是在条件不成立时执行循环体内的命令
until [ condition ]docommanddone这种方式恰恰与 while 相反,它说的是“当 condition 条件成立时,就终止循环, 否则就持续进行循环的程序段。我们先用while举个小例子。
例子:脚本内容
#!/bin/bash
while [ "${yn}" != "yes" ]
do
read -p "请输入'yes'退出: " yn
done
echo "退出成功!."
执行脚本
[root@mysql test]# sh user6.sh
请输入'yes'退出: no
请输入'yes'退出: ha
请输入'yes'退出: yes
退出成功!.
for循环
是最常见的循环结构。for循环是一种运行前测试语句,也就是在运行任何 循环体之前先要判断循环条件是否成立,只有在条件成立的情况下才会运 行循环体,否则将退出循环。每完成一次循环后,在进行下一次循环之前 都会再次进行测试。 带列表的for循环
for var in con1 con2 con3docommanddone\1. 第一次循环时,的 $var 内容为 con1 ;\2. 第二次循环时, $var 的内容为 con2 ;\3. 第三次循环时, $var 的内容为 con3
例子:脚本内容
#!/bin/bash
for (( n=1; n<=10; n++ ))
do
echo "$n"
done
执行脚本
[root@mysql test]# sh user7.sh
1
2
3
4
5
6
7
8
9
10
[root@mysql test]#
类C的for循环
格式如下:for ((expression1; expression2; expression3))docommanddone其中, expression1 为初始化语句,一般用作变量定义和初始化;expression2 为判断表达式,用于测试表达式返回值并以此控制循环,返回值为真则循环继续,返回值为假则退出循环; expression3 用于变量值修改,从而影响 expression2 的返回值,并以此影响循环行为。
[root@sunday-test shell-script]# cat c_for01.sh
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo -n "$i "
done
[root@localhost ~]# ./t2.sh
12345678910
总结:
1 、 while循环的特长是执行守护进程以及我们希望循环不退出持续执行的 情况用于频率小于一分钟循环处理,其他的while循环几乎都可以被for循 环替代。2 、case语句可以替换if语句,一般在系统启动脚本传入少量固定规则字符串,用case语句。其他普通判断多用if语句。3 、 if和for语句最常用,其次是while(守护进程),case(服务启动脚本)各个语句的应用场景:条件表达式,简单的判断(文件是否存在,字符串是否为空等)。if 取值判断,不同值数量较少的情况。for 循环正常的循环处理,最常用!while 循环守护进程、无限循环( sleep )。case 服务启动脚本,菜单。函数逻辑清晰,减少重a