Shell脚本基础从头开始(四)── 第一个shell脚本

本文介绍了Shell脚本的基础知识,包括如何创建和执行脚本、用户自定义变量、系统预定义变量及位置变量的使用。通过实例展示了如何编写和执行简单的Shell脚本,以及如何删除变量。此外,还讲解了双引号、单引号和反引号在引用变量时的区别。文章最后探讨了系统预定义变量$?、$*、$#、$0的用法,以及如何通过$1-$9获取命令行参数。
摘要由CSDN通过智能技术生成

一、 前言

经过前面三节基础的学习,我们终于要迈入shell的大门了。作为一个后端开发,不一定要精通shell脚本开发,但是需要掌握一定的shell编程技巧,毕竟shell脚本作为一门轻量级脚本语言,很多时候可以帮助我们完成一些重复的劳动,极大的释放劳动力。

二、认识shell脚本

shell脚本包含的内容

一个完整的shell脚本主要包含以下几部分内容

  • 运行环境(指定解析器),即shell脚本的第一行通常是 #!/bin/bash
  • 该脚本的注释说明,注释可能有多行除第一行以外其它以#开头的为注释,一个好的shell脚本是便于人阅读的,因此注释是必不可少的部分,特别是复杂的脚本。
  • 脚本的具体命令。

执行shell脚本的方式

执行shell脚本的方式有两种:

  • 使用bash解释器,语法bash 目标shell脚本文件,其特点是,不需要第一行指定解析器,不需要给脚本设置执行权限。
  • 脚本路径前加一个 .,例如脚本文件在当前目录则可以使用./脚本文件名来执行脚本,其特点是需要第一行指定解析器(大多数情况不写也不会出错,因为系统会有默认解释器,但是做为一个良好的编程习惯,建议首行执行解释器),需要给脚本设置执行权限。工作中通常使用第二种方式。

第一个shell脚本

牛刀小试,说了这么多,我们来写一个shell脚本。
需求:记录当前时间以及当前目录下所有文件及其子目录文件的详细信息到/usr/local/shell/fileLog.txt

fileDetails.sh

#!/bin/bash

# 记录当前时间以及当前目录下所有文件及其子目录文件的详细信息追加到`/usr/local/shell/fileLog.txt`

date >> /usr/local/shell/fileLog.txt
# -h 以方便人类阅读的方式展示 -R 递归展示
ls -lhR ./ >> /usr/local/shell/fileLog.txt

一个简单的shell脚本就完成了,主体命令只有两条。
执行脚本,我们可以使用bash fileDetails.sh,但是我们一般习惯使用第二种方式,这时需要授权对这个脚本文件的执行的权限。
可以ls先查看下,没有执行权限的fileDetails.sh是白色的,这时我们授权执行的权限,执行chmod u+x fileDetails.sh。再次ls查看,发现fileDetails.sh已经显示为绿色,表明现在有了对该文件的执行权限。
这时,即可使用./fileDetails.sh来执行脚本了。
执行完毕以后,通过cat fileLog.txt我们发现里面记录了两次执行后的结果,至此,一个简单的脚本就完成啦!

三、shell脚本变量的种类

shell脚本的变量主要分为 3 类,即用户自定义变量、系统预定义变量、位置变量(也可以称作是系统预定义变量的一部分)。

用户自定义变量

即用户自己定义的变量

定义变量

基本语法:变量名=变量值
变量名以英文字母下划线开头,区分大小写。
例如

name=zhangsan
Score=100
age=18

使用变量

语法$变量名

echo $name
echo $Score
echo $age

如果变量名后面紧跟字符,需要使用${变量名}的方式来访问变量。

#!/bin/bash
# 变量的定义和使用

name=张三
age=19

echo "I am $name,I'm $age years old。"

# 不能正确读取变量age
echo "I am $namefeng"

# 可以正确读取变量age
echo "I am ${name}feng"

读取键盘输入端值并赋值给变量

#!/bin/bash
# 读取键盘的输入

read -p "please input your name:" name
echo "Hello everyone, i'm ${name}"

"'反引号的区别

"如果一句话中有变量,则需要使用双引号。
'但英豪不会替换变量的值
反引号位于键盘左上角esc键下方那个键,其作用是用来解析命令,并且把结果返回。

#!/bin/bash
# 读取键盘的输入

read -p "please input your name:" name
echo "Hello every, i'm ${name}"
echo "Hello every, i'm ${name}"
num=`ls | wc -l`
echo "here has ${num} files!"

删除变量

语法 unset 变量名

unset name
unset age

系统预定义变量

linux系统预定义变量常用的包含以下4个,即$?、$*、$#、$0
$# 获取命令行中参数个数。
$0 返回当前进程/程序的名称。
$* 返回命令行中的各个参数。
$0 返回上一条命令的执行状态,为0时表示正常,非0时表示执行异常或出错

看个例子

var.sh

#!/bin/bash
# 系统预定义变量

echo "读取到命令行参数的个数是:$#"
echo "读取到的参数分别是:$*"

total=0
for i in $*;do
    total=$(($total+$i))
done

echo "读取到的参数之和是 $total"

ls -l | grep -P '^\d{4}-\d{2}-\d{2}$'

if [[ $?==0 ]];then
    echo "上条命令执行成功,程序继续执行"
else
    echo "上条命令执行失败,程序终止。"
fi

执行 ./var.sh 1 2 3 4,观察结果,相信通过上面这个例子大家对于系统预定义变量已经了解了。

位置变量

相对来说,位置变量就比较简单了,通过 $1 - $9 来获取命令行第 1 到第 9 个变量。直接看例子
var.sh

#!/bin/bash
# 位置变量
echo "读取到的第一个变量是:$1"
echo "读取到的第二个变量是:$2"
echo "读取到的第三个变量是:$3"
sum=`expr $1 + $2 + $3`
echo "读取到的三个变量的和是:$sum"
echo "读取到的三个变量的和是:$(($1 + $2 +$3))"

执行命令./var.sh 1 2 3,结果如下

读取到的第一个变量是:1
读取到的第二个变量是:2
读取到的第三个变量是:3
读取到的三个变量的和是:6
读取到的三个变量的和是:6

今天关于shell脚本的基础就介绍到这里,快去练练手吧,各位,改日再战!!

系列传送门如下:
Shell脚本基础从头开始(一)── 几个linux实操技巧
Shell脚本基础从头开始(二)── 输出重定向
Shell脚本基础从头开始(三)── linux的权限管理
Shell脚本基础从头开始(五)── shell的输入输出
Shell脚本基础从头开始(六) ── shell条件测试
Shell脚本基础从头开始(七)── shell的流程控制
Shell脚本基础从头开始(八)── shell的循环语句
Shell脚本基础从头开始(九)── shell的循环语句控制
Shell脚本基础从头开始(十)── shell的文本过滤
Shell脚本基础从头开始(十一)── shell的文本过滤(二)
Shell脚本基础从头开始(十二)── 制作一个字符菜单
Shell脚本基础从头开始(完结篇)── 利用shell编写监控脚本以及shell操作数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不务正业的攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值