【Linux私房菜】第六期——Shell编程

1.Shell 是什么?

是一个命令解释器,它为用户提供一个向Linux内核发起请求以便于运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。【以bash为例】

请添加图片描述

2.Shell 脚本是如何执行的?

(1)脚本要以 #!/bin/bash开头

请添加图片描述

(2)可以通过sh + 脚本执行shell脚本

请添加图片描述

(3)也可以为要执行脚本的用户添加权限,输入脚本的路径即可

请添加图片描述



3.Shell 的变量是如何使用的呢?

  • Linux Shell中的变量分为** 系统变量和用户自定义变量 **两种【通过set指令可以查看系统变量】
  • 通过# 注释内容指令完成单行注释
  • 通过:<<! 注释内容 !指令完成多行注释【两次的语句要另起一行】

(1)Shell 变量的命名规则:

变量名可以由字母、数字、下划线组成,但是不能以数字开头

(2)使用规范:

变量名采用大写字母,等号两侧不能留有空格

(3)变量的几个基本操作

通过变量名=变量值指令定义变量【静态变量要添加 readonly关键字】

请添加图片描述

echo 后的引号添不添加都可以,运行脚本输出结果如下

请添加图片描述

通过unset 变量名指令撤销变量【静态变量不能被撤销】

请添加图片描述

撤销后变量就无法使用了,运行脚本输出结果如下

请添加图片描述

通过反引号**`` ∗ ∗ 来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加 ∗ ∗ **来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加** 来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加**符号


4.如何避免在不同shell文件中重复设置相同的变量?

  • 可以通过设置环境变量【全局变量】所有shell脚本都可以使用
  • 设置环境变量的流程:

(1)编辑/etc/profile文件,添加环境变量【使用了export关键字】

请添加图片描述

(2)通过source /etc/profile刷新配置信息

(3)在终端利用echo直接输出TOMCAT_HOME

请添加图片描述

利用之前创建的var.sh文件调用并输出这个环境变量

请添加图片描述
请添加图片描述


5.如何给Shell脚本传递参数呢?

  • 通过位置参数变量可以完成参数的传递
  • 在脚本中利用$n代表传入的第n个参数,执行脚本时在末尾添加多个参数【用空格隔开,传递的参数可以小于脚本中应用的参数个数】
参数的语法基本含义
$n$1-9代表第一个到第九个参数,十个以上要写成 ${n}的形式
$*代表全部参数,把所有参数看成一个整体
$@代表全部参数,把所有参数区分对待
$#代表命令行中参数的个数

请添加图片描述

执行脚本并传入参数,运行结果如下:

请添加图片描述


6.Shell中有哪些预定义变量呢?【不常用】

(1)$$返回当前进程号

(2)$!返回后台运行的最后一个进程号

(3)$?返回最后一次执行的命令的运行状态【0代表正常运行,其他代表运行出现了异常】


7.Shell中如何进行算数运算?

(1)有三种运算表达式

exper 表达式一次只能进行一次运算【比如既有加法也有乘法,那么要用两次来计算】

$((表达式))表达式为任意数学表达式【支持Shell的】

$[表达式]这个属于上式的简化版本【推荐】

(2)运算符

符号含义
+加法
-减法
*乘法(如果采用expr表达式要添加反斜杠\*
/除法
%取余

请添加图片描述

运算结果如下:

请添加图片描述


注意:【如果采用expr表达式】

获取表达式结果要在两侧添加反引号**``**

表达式之间以及与expr之间都有留有一个空格


8.基本条件判断的语句格式?

if [ 条件 ]
then 
满足条件的处理;
fi

(1)条件两侧留有一个空格

(2)如果条件处不是一个条件表达式,那么就为true

(3)字符串比较:=

(4)两个整数比较:

符号含义
-lt小于
-gt大于
-eq等于
-ne不等于
-le小于等于
-ge大于等于

(5)文件权限比较:

符号含义
-r有读权限
-w有写权限
-x有执行权限

(6)文件类型比较:

符号含义
-f文件存在并且是一个常规文件
-e文件存在
-d文件存在并且是一个目录
-b文件存在并且是一个块设备文件
-c文件存在并且是一个字符设备文
-p文件存在并且是一个管道文件
-s文件存在并且是一个套接字文件

之所以没有-l是因为我测试发现

请添加图片描述


(7)案例分析

请添加图片描述

运行结果如下:

请添加图片描述


9.单分支与多分支条件判断语句【注意条件左右的空格】

(1)单分支的代码格式:

if [ 条件判断式 ]
then
代码
fi

(2)多分支的代码格式:

if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi

(3)案例分析:输入考试成绩,大于60输出及格,否则输出不及格

#!/bin/bash
if [ $1 -ge 60]
then
  echo "及格";
elif [ $1 -lt 60]
then 
  echo "不及格";
fi;

请添加图片描述


10.选择分支【case语句】

(1)基本语法

case $变量名 in
"值1" )
代码
;;
"值2" )
代码
;;
* )
default部分的代码
;;
esac

(3)案例分析:参数为1输出1,参数为2输出2,其他情况输出0

#!/bin/bash
case $1 in
"1" )
echo 1;
;;
"2" )
echo 2;
;;
* )
echo 0;
;;
esac;

请添加图片描述


11.Shell的循环结构

(1)for循环的基本语法

# 语法一
for 变量 in 值1 值2 ...
do
程序
done
# 语法二
for(( 初始值;循环控制条件;变量变化))
do
程序
done

(2)通过参数传入结合语法一我们可以看出$*$@的区别

#!/bin/bash
for i in "$*"
do
echo num = $i;
done
for j in "$@"
do
echo num = $j;
done

输出结果如下:

请添加图片描述

有几个需要注意的点:【通过测试案例得知】

  • 如果不为$*添加引号,那么输出的结果也是三个,因为尽管$*是一个参数整体,但是$i每次从中只取一个子参数
  • 循环代码段执行几次,取决于 in 后面参数的个数

(3)通过范围循环,我们完成1到100的和【注意:此处的判断符号使用的是数学符号】

#!/bin/bash
SUM=0;
for((i=1;i<=100;i++))
do
SUM=$[SUM+$i];
done
echo sum = $SUM;

请添加图片描述

(3)while循环语法格式【while与中括号、条件两侧 都有一个空格】

while [ 条件 ]
do
代码
done

注意此处的条件采用了条件判断语句的符号,而不是直接使用数学符号

利用while循环实现1-100加和

#!/bin/bash
SUM=0;
i=0;
while [ $i -le 100]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo sum = $SUM

请添加图片描述


12.用户如何动态的输入数据呢?

(1)语法格式:read 选项 参数【参数要与前面的内容有一个空格】

通过-p选项可以给出提示信息【自己预先设置的】

通过-t选项可以设置等待输入时长(s)【超时则跳过当前输入】

(2)案例分析:从键盘输入一个数NUM,不能超过5s

#!/bin/bash
read -t 5 -p "请输入一个数" NUM;
echo "你输入的数为$NUM";

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p14nfnDe-1663549400089)(attachment:a24240ff493bd90f3141efd78c08f6c5)]


13.Shell中的函数有哪些?

  • Shell中函数分为两类:系统函数自定义函数

(1)系统函数【常用的有两个】

通过base 路径指令获取文件名;通过dirname 路径指令获取文件的路径【不包括文件名】

(2)自定义函数【基本语法如下】

# 函数的定义
function 函数名(参数列表){
    代码
}
# 函数的定义要写在调用前面
# 函数的调用
函数名 参数列表;

实现一个两个数加法函数:
请添加图片描述
运行结果如下:

请添加图片描述


14.综合案例分析:

在这里插入图片描述
数据库备份步骤:
在这里插入图片描述
编写Shell脚本【因为我没有安装Mysql所以此处为参考代码】
在这里插入图片描述
创建定时任务

crontab -e
30 2 `* * *` /user/sbin/mysql_db_backup.sh
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bow.贾斯汀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值