Shell脚本——编程规范与变量
Posted 可乐卷儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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比较方便好用
二、Shell脚本编程规范
1、编写第一个shell脚本文件
vim test.sh #shell脚本不以扩展名定义,.sh为了好识别是shell脚本
脚本文件内容分为以下三个部分组成
1.1、编辑多行脚本内容
有两种方式
一种添加注释#,
第二种“<<”
2、执行脚本
2.1、添加可执行权限
chmod +x 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
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、自定义变量
自定义变量是由系统用户自己定义的变量,只能用户自己的shell环境中有效,因此又称本地变量
- 定义变量的基本格式:变量名=变量值,等号两边没有空格
- 变量名称需以字母或者下划线开头,名称中不可用包含特殊字符(如+、-、*、/、?、%、&、#等)
1.1、查看和引用变量的值
使用ehco命令查看变量,$:shell环境中表示调用变量
且变量名区分大小写
unset 变量名 #取消/清除/释放变量
set #查看系统所有自定义变量
set | grep AAA:查询变量AAA
拓展知识
1.2、变量赋值的操作
1.2.1、大括号–${}
${}:相当于分界符
1.2.2、单双引号–’’、“”、
- 有特殊符号时
- 单引号里的任何字符都会以原样输出,单引号中的变量是无效的
- 双引号 (双引号里可以有变量,也可以出现转译字符)双引号主要起界定字符串的左右,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况双引号可以省略
- 无特殊符号的时,单引号和双引号一个概念
1.2.3、转义符–\\
转义符跟双引号类似,当赋值的内容中包含空格时,使用转义符,可以输出变量值
1.2.4、反撇号–`
反撇号主要是用于命令替换,允许将执行某个命令的平米输出结果赋值给变量;反撇号括起来的范围内必须是能够执行的命令行,否则会出错
which rz #查找出rz命令的程序位置
rpm qf # 查找安装的软件包
1.2.5、readonly命令
readonly 脚本 #只读变量
赋值只读无法更改变量值,取消只读变量,只能退出exit,重新连接;或者更改shell变量,比如更换bash环境即可
1.2.6、read命令
read命令用来提示用户输入信息,从而实现简单的交互过程;
执行时将从标准输入设备读入一行内容,并以空格为分隔符,将读入的各字段挨个复制给指定的变量(多余的内容赋值给最后一个变量)。
-p:友好的输入;提示输
-n num:限制变量值最多的字符数
-s :静默模式;常用于输入密码场景
1.3、实操
- 自定义创建新用户和密码
vim user.sh
没有在文件内定义创建具体用户,输入任意用户名即可创建用户
增加一条:name=lisi;代表只能增加一个用户lisi
2、环境变量
2.1、概念
环境变量指的是处于运行需要而有linux系统提前创建的一类变量,用户不变的情况下,一直延用环境变量
- 使用env命令可以查看当前工作环境下的所有环境变量
- 查看单个环境变量
- 比如:echo ¥HOME
2.2、自定义变量变成环境变量
- 永久:需要写入配置文件
vim /etc/profile #环境变量配置文件
export aa=10
bash #切换shell环境
source /etc/profile
echo $aa
- 临时
bb=20
export bb
exit
退出系统再重新登入
- echo $SHLVL #查看当前shell的层级
2.3、实操
实验要求:可以执行test.sh
这时看一下根目录在/root
那就需要在环境变量里面加入
vim /etc/profile
PATH=$PATH:/root #增加一行变量
以上是关于Shell脚本——编程规范与变量的主要内容,如果未能解决你的问题,请参考以下文章