Shell编程之条件语句(一)——编程规范与变量

一、Shell脚本概述

Shell脚本就是将要执行的命令按顺序保存到一个文本文件,并给该文件分配可执行权限,方便一次性执行的一个程序文件。

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件分配可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操作

1、应用场景

主要是方便管理员进行设置或管理,可结合格式Shell控制语句以完成更复杂的操作,常用于以下场景:

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

2、作用–命令解释器,“翻译官”

结余系统内核与用户之间,负责解释命令行;使用命令管理系统,所有可以看做是一系列命令的集合,按顺序从上到下执行

cat /etc/shells  #查看系统可支持的shell环境
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

目前大多数linux系统采用的默认shell环境是bash,shell环境都可以使用yum安装

yum -y install ksh  #安装ksh shell环境
yum -y install csh  #安装csh shell环境
.....

我们来大概看一下bash和sh的区别,相对来说bash比较方便好用
在这里插入图片描述

3、文本输出-echo命令

  • echo -n #表示不换行输出
  • echo -e #表示转义字符
    • \c不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n
    • \n换行输出,且多一行空格
      在这里插入图片描述
  • 使用echo命令的-e选项,除了能够输出转义字符,还能够在命令行中输出彩色的字符,或是带有彩色背景的字符
    举例说明
echo -e "\e[33mhello\e[0m"
  • 从代码来看分为两部分:\e[31m 和\e[0m
  • 这些代码有一个专业名词,叫做“ANSI控制码”
  • 我们习惯把 \e[31m理解成“开始输出红色字符”,把\e[0m理解成“结束输出红色字符”\
  • 当echo -e遇到\e[31m的时候,就认为自己要输出红色字符了,\e[31m就是一个信号,它告诉echo -e,需要开始输出红色字符了,\e[0m也是一种信号,[0m是结束符,它告诉echo -e命令,红色字符已经输出结束了,在输出的字符应该是黑白字符了,不能是彩色的了

下面是字体输出颜色及终端格式控制

  • 字体色范围:30-37
    在这里插入图片描述
  • 字背景颜色范围:40-47
    在这里插入图片描述
    实例

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

二、Shell脚本编程规范

1、编写第一个shell脚本文件

  • 使用vim文本编辑器
  • 每行一条linux命令,按执行顺序依次编写,脚本文件内容
    • #!/bin/sh #声明解释器;固定格式顶行写
    • 注释信息
    • 可执行语句
vim test.sh    #shell脚本不以扩展名定义,.sh为了好识别是shell脚本
#!/bin/bash   #声明解释器
#这是我的第一个脚本   #注释信息
#作者:可乐卷         #注释信息
echo "hello world"   #可执行语句

在这里插入图片描述

  • 编辑多行脚本内容;有两种方式
    • 一种添加注释#
      在这里插入图片描述
    • 第二种“<<”
      在这里插入图片描述

2、执行脚本文件

2.1、添加可执行权限

添加权限之后可以使用相对路径和绝对路径,具体看下图

chmod +x test.sh   #添加可执行权限
./test.sh  #执行test.sh脚本文件;相对路径
/root/test.sh  #执行test.sh脚本文件;绝对路径

在这里插入图片描述

2.2、不添加可执行权限

  • 调用解释器执行:bash、sh
bash 脚本名称
sh 脚本名称

在这里插入图片描述

  • source test.sh

注意点:若移动脚本文件至其他目录,需要使用绝对路径
在这里插入图片描述

  • . test.sh;source相当于“.”
    在这里插入图片描述

2.3、小结

  • source和.是在当前的shell执行脚本
  • 其余都是会在当前shell另外再开一个shell环境执行脚本,比如bash、sh、绝对路径等

验证一下:

vim test.sh   #新建一个脚本
#!/bin/bash #声明解释器
sleep  1000  #睡眠1000s;代码内容
pstree    #再打开一个shell查看pstree
source test.sh 
bash test.sh

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

  • sh和bash执行文件的区别
    • sh:遇到错误就不会执行后面的脚本
    • bash:遇到错误仍会继续执行,把整个脚本走完一遍

验证一下:

vim test.sh
bash test.sh
sh test.sh

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

2.4、实操

  • 创建一个脚本,当前目录下创建目录klj,klj目录下创建文件zz,并移动到opt目录下
    在这里插入图片描述
    在这里插入图片描述

3、检测脚本

bash -x 脚本  #显示执行过程,通常当脚本很长的时候便于定位;会把脚本中的每条命令的执行情况打印出来
bash -n 脚本 #仅检查语法错误,如果用vim编写的话,正常的话会变色仅检测语法错误,会显示出错误的行数

实例:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4、实操

实验要求:配置本地yum源并且查询正在使用的yum源

#!/bin/bash
mount /dev/sr0 /mnt
cd /etc/yum.repos.d/
mkdir repo.bak
mv *  repo.bak/
echo "[centos7]
name=centos7
baseurl=file:///mnt
enable=1
gpgcheck=0">>/etc/yum.repos.d/repo.repo

yum clean all
yum makecache
yum repolist

实验结果
在这里插入图片描述

三、shell脚本变量

1、变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)
    • 变量名:使用固定的名称,由系统预设或用户定义
    • 变量值:能够根据用户设置、系统环境的变化而变化

2、自定义变量

自定义变量是由系统用户自己定义的变量,只能用户自己的shell环境中有效,相当于局部变量;因此又称本地变量。

  • 定义变量的基本格式:变量名=变量值,等号两边没有空格
  • 变量名称需以字母或者下划线开头,名称中不可用包含特殊字符(如+、-、*、/、?、%、&、#等)

2.1、查看和引用变量的值

  • 使用ehco命令查看变量,$:shell环境中表示调用变量

在这里插入图片描述

  • 且变量名区分大小写
    在这里插入图片描述

2.2、变量赋值的操作

  • 大括号–${}
    ${}:相当于分界符
    在这里插入图片描述
  • 单双引号–(’’)、(“”)
    • 有特殊符号时
      • 单引号里的任何字符都会以原样输出,单引号中的变量是无效的
      • 双引号 (双引号里可以有变量,也可以出现转译字符)双引号主要起界定字符串的左右,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况双引号可以省略
        在这里插入图片描述
    • 无特殊符号的时,单引号和双引号一个概念
      在这里插入图片描述
  • 转义符
    转义符跟双引号类似,当赋值的内容中包含空格时,使用转义符,可以输出变量值
    在这里插入图片描述
  • 反撇号(`)

反撇号主要是用于命令替换,允许将执行某个命令的平米输出结果赋值给变量;反撇号括起来的范围内必须是能够执行的命令行,否则会出错

ls -lh `which useradd` 

使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用“$()”来代替反撇号操作,以解决嵌套的问题

which rz #查找出rz命令的程序位置
rpm qf # 查找安装的软件包

在这里插入图片描述

  • 交互式定义变量-read命令
    除了上述赋值操作以外,还可以使用bash的内置命令read来给变量赋值;用来提示用户输入信息,从而实现简单的交互过程;执行时将从标准输入设备读入一行内容,并以空格为分隔符,将读入的各字段挨个复制给指定的变量(多余的内容赋值给最后一个变量)。
  • 直接定义变量name,光标不动等待用户输入,输入shell,变量的值就会复制给name
    在这里插入图片描述
  • 常用选
-p:友好的输入;提示输
-n num:限制变量值最多的字符数
-s :静默模式;常用于输入密码场景

在这里插入图片描述
在这里插入图片描述
实例:

自定义创建新用户和密码

vim user.sh    #创建脚本文件 #user.sh

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

增加一条:name=lisi;代表只能增加一个用户lisi
在这里插入图片描述

2.3、整数变量的运算

固定格式: expr 变量1 运算符 变量2 [运算符 变量3]…
常用运算符

  • +:前后需要空格
  • -:前后需要空格
  • *:需要添加转义符\
  • /:取除的整数
  • %:取余数
  • **:次方
    在这里插入图片描述
    在这里插入图片描述
    与自定义变量结合使用
    在这里插入图片描述
    使用调用echo
    在这里插入图片描述
    **:次方
    $[]
    在这里插入图片描述
    在这里插入图片描述
    $()
    在这里插入图片描述
    let:无法直接输出答案,需要echo运算出结果
    a++=a+1:是使用的a后,再对a进行加1
    a–=a-1
    ++a=1+a:先把a加1,然后再使用a
    在这里插入图片描述
    在这里插入图片描述
    bc:系统自带的计算器,处理整数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    scale: (decimal places) 范围(小数位数)在这里插入图片描述

3、环境变量

3.1、概念

环境变量指的是处于运行需要而有linux系统提前创建的一类变量,用户不变的情况下,一直延用环境变量

  • 使用env命令可以查看当前工作环境下的所有环境变量
echo 环境变量  #查看单个环境变量
  • 常见的环境变量
    • $USER
    • $UID
    • $PWD
    • $HOSTNAME

3.2、自定义变量变成环境变量

  • 临时性: export 变量名;在不改变登录用户的情况下一直存在
bb=20
export bb   #直接在shell环境输入

exit系统退出即失效
在这里插入图片描述

  • 永久:若需要改变用户时,变量仍存在,需要写入配置文件
vim /etc/profile   #环境变量配置文件
export  aa=10     #
source  /etc/profile  #重新读入配置文件 
echo $aa 

在这里插入图片描述
在这里插入图片描述
有时脚本操作会进入很多层级,需要不停exit退出才能彻底退出系统,那么有什么方法可以查询shell的层级呢?

  • echo $SHLVL #查看当前shell的层级
    在这里插入图片描述

3.3、实操

实验要求:可以执行test.sh
给脚本文件赋予可执行权限,仍无法执行
在这里插入图片描述

因为uesr.sh不在$PASH的目录里面,所以系统无法直接用,需要跟上绝对路径使用该脚本在这里插入图片描述

  • 方法一:写入环境变量的配置文件
vim /etc/profile
PATH=$PATH:/root  #增加一行变量

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

  • 方法二:临时加入环境变量

在这里插入图片描述

4、只读变量-readonly

readonly 脚本    #只读变量

赋值只读无法更改变量值,取消只读变量,只能退出exit,重新连接;或者更改shell变量,比如更换bash环境即可
在这里插入图片描述

5、位置变量

传递参数给到脚本内
$0:当前执行的脚本
$1:脚本的第一个参数
$2:脚本的第二个参数
…以此类推

实例
vim klj.sh
在这里插入图片描述
在这里插入图片描述
实例
在这里插入图片描述
在这里插入图片描述

6、预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。
预定义变量使用"$”符号和另一个符号组合表示

$#:表示命令行中位置参数的个数
$*: 表示所有位置参数的内容,这些内容当做一个整体
$@:表示所有列出位置参数,但是是以单个的形式列出
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常
$0:表示当前执行的脚本或程序的名称
$$: 表示当前进程的进程号
$!: 上一个后台进程的进程号
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常

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

7、查询变量

unset 变量名  #取消/清除/释放变量
set  #查看系统所有变量;包含自定义变量和环境变量

在这里插入图片描述

set | grep AAA:查询变量AAA

在这里插入图片描述
拓展知识
在这里插入图片描述

四、重定向

1、交互式硬件设备

  • 标准输入:从键盘输入,设定键盘为输入设备
  • 标准输出:通过显示器输出到屏幕
  • 标准错误:当我执行一个命令时,显示器会把错误信息输出到屏幕
类型设备文件文件描述编号默认设置
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/devstderr2显示器

2、重定向操作

在这里插入图片描述
重定向输出:>=1>;>>=1>>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
/dev/null:系统自带的黑洞系统,相当于垃圾桶;null:黑洞;/dev:设备
在这里插入图片描述
<:输入:把屏幕前的结果输入到指定文件内
vim pass.txt
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值