Shell 脚本

注:文章参考《鸟哥的linux私房菜》、通义千问AI产品

认识 Shell

Linux 中的 Shell 就是 linux 内核的一个外层保护工具,并负责完成用户与内核之间的交互。

Shell 可以分为以下几类:

  • Bourne Shell (简称 sh)
  • C Shell(简称 csh)
  • Korn Shell(简称 ksh)
  • Bourne Again Shell(简称 bash)

其中目前 bash 最为流行。

对于 shell 脚本,其实就是把脚本的内容放到 shell 环境中运行,和 windows 的 批处理文件类似

Shell 变量

在这里插入图片描述

环境变量

常用 shell 环境变量
在这里插入图片描述

局部变量
#!/bin/bash 
localVar="I am a local variable" 
echo $localVar # 输出: I am a local variable bash 

这个脚本中定义的变量无法再其他脚本文件中访问

位置变量

在这里插入图片描述

#!/bin/bash 
echo "The first parameter is $1" 
echo "The second parameter is $2" 
echo "The name of the script is $0" # 


执行: ./myscript.sh arg1 arg2 
# 输出: # The first parameter is arg1 
# The second parameter is arg2 
# The name of the script is ./myscript.sh

编写 Shell 脚本

Hello World!

在这里插入图片描述

#!/bin/bash 在宣告这个 script 使用的 shell 名称,这个文件内的语法是 bash 的语法

接着以 # 开头的均为注释,在 shell 脚本中 # 代表行注释

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
这两行是在配置环境变量

echo -e “Hello World! \a \n”
这一行表示待会执行 shell 脚本时,屏幕上会显示 Hello World!,
相当于使用标准输出输出Hello World! 这个字符串

echo命令参数详解
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上图展示了两种执行 shell 脚本的方式,创建 shell 脚本默认没有执行权限

第一种方式:sh hello.sh
这种方式不需要 hello.sh 具有执行权限

第二种方式:修改 hello.sh 的权限为创建者可执行,其他用户只读
然后执行 ./hello.sh

第三种方式: source hello.sh
这种方式也可以执行 shell 脚本,但会因为写了 exit 0 退出整个 shell

这三种方式均可以执行 shell 脚本

source, sh script, ./script 的执行方式差异

sh script 和 ./script 相当于在父 shell 中开了个子程序
在这里插入图片描述

这种方式在 shell 脚本中创建的任何变量不会保存到父程序中

source hello.sh
在这里插入图片描述

这种方式是直接将脚本放在当前shell 环境中运行,脚本中创建的变量会保存到父程序中

测试
在这里插入图片描述

从上图可以看出执行方式的差异
这也是为啥你不登出系统而要让某些写入 ~/.bashrc 的设置生效时,需要使用“ source ~/.bashrc ”而不能使用“ bash ~/.bashrc ”是一样的

输入输出语句

在这里插入图片描述

read命令是从标准输入读入一行数据,然后赋值给一个或多个变量
read 命令相关参数
在这里插入图片描述

read -p "Please input your first name: " firstname # 提示使用者输入
这里是先提示 "Please input your first name: "
用户输入后将值赋给 firstname

read -p "Please input your last name: " lastname # 提示使用者输入
这里是先提示 "Please input your last name: "
用户输入后将值赋给 lastname

echo -e “\nYour full name is: ${firstname} ${lastname}” # 结果由屏幕输出
这里${firstname} 和 ${lastname} 是 shell 脚本中取出一个变量的值的方法

创建前天、昨天、今天的日期文件

在这里插入图片描述

filename=${fileuser:-“filename”} # 开始判断有否配置文件名
这一行是一种默认配置,比如用没输入文件名,那filename就会是后面的字符串"filename"
在这里插入图片描述

date1=$(date --date=‘2 days ago’ +%Y%m%d) # 前两天的日期
date2=$(date --date=‘1 days ago’ +%Y%m%d) # 前一天的日期
date3=$(date +%Y%m%d) # 今天的日期

这里$()是截取输出给左边的变量

date 是 Linux/Unix 系统中用于显示或设置系统时间与日期的命令。
常用格式化选项
在这里插入图片描述

其他参数
在这里插入图片描述

–date= 后面可以写以下内容
在这里插入图片描述

相对时间
在这里插入图片描述

具体时间
在这里插入图片描述

时间偏移
在这里插入图片描述

自然语言
在这里插入图片描述

执行shell 脚本
在这里插入图片描述

四则运算

在这里插入图片描述

推荐使用var=$((运算内容)) 这种格式进行四则运算,容易记忆

> 用 echo 输出时,&gt 会输出为 >

执行 shell 脚本
在这里插入图片描述

条件分支语句

if 条件语句

在这里插入图片描述

case 分支语句

在这里插入图片描述

案例
在这里插入图片描述

test 指令

在这里插入图片描述

比如这一行命令
-e 判断文件名是否存在
这一行相当于伪代码:

if test -e /dmtsai is true: 
	echo "exist" 
else: 
	echo "Not exist"

可用参数
在这里插入图片描述

在这里插入图片描述

利用判断符号 []
注意在 [ 和 ] 两侧加上空格
在这里插入图片描述

在这里插入图片描述

循环语句

for 循环

语法:for…do…done

案例一
在这里插入图片描述

案例二
在这里插入图片描述

案例三
在这里插入图片描述

while循环

语法:while…do…done

案例
在这里插入图片描述

until

语法:until…do…done

案例
在这里插入图片描述

函数 Function

语法:function 函数名(){}

function里面的 return 只能返回状态码(只能是 0~255)
推荐使用 echo 输出结果,然后使用$() 获取结果

案例
在这里插入图片描述

习题(答案在后面)

第一题

请创建一支 script ,当你执行该 script 的时候,该 script 可以显示:

  1. 你目前的身份 (用 whoami )
  2. 你目前所在的目录 (用 pwd)
第二题

让使用者输入一个数字,程序可以由 1+2+3… 一直累加到使用者输入的数字为止。

第三题

撰写一支程序,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则创建一个文件,使用 touch 来创建,创建完成后离开; 3.) 如果存在的话,判断该名称是否为文件,若为文件则将之删除后创建一个目录,文件名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,则移除此目录!

第四题

习题答案

第一题

在这里插入图片描述

.sh后缀可以不加,但第一行必须有#!/bin/bash

第二题

在这里插入图片描述

第三题

在这里插入图片描述

总结

个人感觉,光是把这些内容看完、敲完,对 Shell 的掌握还远远不够。因此,我打算新开一个专栏,每天练习一道 Shell 编程题,不断积累实战经验。也愿与各位朋友共勉,在 Shell 的世界里越走越远!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

linux-hzh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值