初识shelll脚本

一.shell 脚本概述

1.1 shell脚本
  1. shell脚本是将要执行的命令按顺序保存到一个文本文件里
  2. 需要给该文件可执行的权限
  3. 可结合各自Shell控制语句以完成更复杂的操作
  4. Shell是一个特殊的应用程序,它介于系统内核与用户之间,充当"命令解释器"的角色,也称命令“翻译官”。
1.2 shell脚本应用场景

1.重复性操作
2.交互性任务
3.批量事务处理
4.服务运行状态监控
5.定时任务执行

1.3 shell的作用
  • 负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
  • 用户登录后默认使用Shell程序,一般为/bin/bash。不同Shell的内部指令、运行环境等都会有所区别
[root@localhost ~]#cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
  • 命令的解释器,翻译官
    • 介于系统内核与用户之间,负责解释命令行
      ——命令解释器,“翻译官” 介于系统内核与用户之间,负责解释命令行 是一种解释性语言。
1.4 变量的作用
 用来存放系统和用户需要使用的特定参数。
 变量名;使用固定的名称,由系统预设或用户定义。
 变量值;能够根据用户设置、系统设置、系统环境的变化而变化。
1.5 变量的类型
  1. 自定义变量;由用户自己定义、修改和使用。
  2. 特殊变量;环境变量、只读变量、位置变量、预定义变量
1.6 shell的分类(根据环境进行分类)
 /bin/sh 
 /bin/bash
  /usr/bin/sh
   /bin/tch 
   /bin/csh*

二.编写shell脚本

2.1.Shell脚本解释器

Linux的Shell脚本解释器种类众多,一个系统可以存在多个shell脚本解释器。

cat /etc/shells 命令查看系统中安装的shell脚本解释器。
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
2.2 bash和sh不同环境

在这里插入图片描述

三、Shell脚本编程规范

3.1 shell脚本概念
  1. 将要执行的命令按顺序保存到到一个文本文件。
  2. 给改文件可执行权限。
  3. 可结合各种shell控制语句以完成更复杂的操作。
3.2 编写第一个shell脚本文件
vim test.sh    #shell脚本不以扩展名定义,.sh为了好识别是shell脚本

脚本文件内容分为以下三个部分组成
在这里插入图片描述

3.3 执行脚本

执行脚本的四种方式:

  1. 方法一:脚本文件路径(绝对路径与相对路径
[root@localhost ~]# ./test.sh
  1. 方法二:sh 脚本文件路径
[root@localhost ~]# sh test.sh
  1. 方法三:source 脚本文件路径
[root@localhost ~]# source test.sh 

此方法也不要求脚本拥有执行权限,但若脚本中执行了切换位置的命令,此方式同样会进行切换。

  1. 方法四:“.” 的使用
[root@localhost ~]# . test.sh
  1. 更完善的脚本由三部分构成
    脚本声明
    注释信息
    可执行语句
#!/bin/bash
#这是我的第一个脚本.
cd /boot/
echo  //当前的目录位于:"
pwd
echo //其中以vm开头的文件包括
ls -lh vm*    
  1. 执行脚本
[root@localhost ~]# sh test.sh
当前的目录位于:
/boot
其中以vm开头的文件包括:
-rwxr-xr-x. 1 root root 5.7M Nov 25 19:07 vmlinuz-0-rescue-0c76c4a5ba044cb8a81c079681ade901
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
3.4 自定义变量
3.4.1 定义变量
a=192.168.132    //变量名=变量值
b=nianshao

当前进程中有效,
在这里插入图片描述

3.4.2 变量名的定义规则

基本格式:变量名=变量值

  1. 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线“_”组成;最后一个字符可以是类型说明符;.
  2. ● VERSION=6.0
  3. ● 等号两边没有空格,变量名称以字母或者下划线开头,名称中不 要包括特殊字符,不能以数字开头
    变量名区分大小写
  4. unset a # #取消a的赋值
set #查看所有变量
declare -i a=123 #规定变量只能为数字
readonly a=123 #规定变量不可变, 只能退出exit取消

四 变量的调用

双引号(“”)
界定字符串,赋值的内容包括空格,必须以双引号括起来,在双引号的范围内,使用$符号引用变量值
 ##WEIXIN="weixin  5.0"

单引号('')
变量值包括特殊符号%¥¥#@等,使用单引号括起来。在单引号的范围内无法引用其他变量的值
##PEI=‘$peihua%’

反撇号(``)

反撇号主要用于命令替换,允许将执行某个命令的输出结果赋值给变量

##DENNLIST=`grep -v  "^#" /etc/vsftpd`

实现两个命令以上的嵌套命令,需要改用$()来代替反撇号
##rpm -qc $(rpm -qf $(which useradd))
bash的内置命令read 给变量赋值

交互式定义变量(read)

选项描述
-p定义提示用户信息。
-n定义字符数,限制变量值的长度。
-s不显示用户输入的内容
-t定义超时时间(限制变量值的超时时间)默认为秒

四 环境变量

4.1 局部变量
环境变量:当前进程有效,并且能够被子进程调用,在子进程定义的在父进程不能调用
- env 查看当前用户的环境变量
   - set 查询当前用户的所有变量(临时变量与环境变量)
   - export 变量名=变量值 或者 变量名=变量值;export 变量名
 B=123
export B      //临时把一个临时变量变成环境变量,重开机失效(切换用户不生效)
env | grep B
B=123
4.2 全局变量

全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用
在这里插入图片描述

4.3 实操

配置本地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

在这里插入图片描述

  1. 查看和引用变量的值

使用ehco命令查看变量,$:shell环境中表示调用变量
在这里插入图片描述
2. 且变量名区分大小写
在这里插入图片描述
3. ** 变量赋值的操作**

大括号–${}
${}:相当于分界符

在这里插入图片描述

  1. 转义符
    转义符跟双引号类似,当赋值的内容中包含空格时,使用转义符,可以输出变量值
    在这里插入图片描述
  2. 反撇号(`)
    反撇号主要是用于命令替换,允许将执行某个命令的平米输出结果赋值给变量;反撇号括起来的范围内必须是能够执行的命令行,否则会出错
ls -lh `which useradd

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

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

在这里插入图片描述

read answer
从标准输入读取一行并赋值给变量answer
read test last
从标准输入读取一行,直至遇到第一个空白符或换行符。把用户键入的第一个词存到变量first中,把该行的剩余部分保存到变量last中
read
标准输入读取一行并赋值给内置变量REPLY
read –a arrayname
读入一组词,依次赋值给数组arrayname③
read -e
在交互式shell命令行中启用编辑器。例如,如果编辑器是vi,则可以在输入行时使用vi命令③
read –p prompt
打印提示符,等待输入,并将输入赋值给REPLY变量③
read –r line
允许输入包含反斜杠③

五 实例

  1. 自定义创建新用户和密码
    在这里插入图片描述
[root@localhost ~]# ./user.sh
-bash: ./user.sh: 权限不够
[root@localhost ~]# chmod +x user.sh //获得权限
[root@localhost ~]# ./user.sh
[root@localhost ~]# ./user.sh
请输入用户名; qq     //创建用户
请输入密码:123      //输入密码
更改用户 qq 的密码 。
passwd:所有的身份验证令牌已经成功更新。 //创建成功
  1. 增加一条:name=lisi;代表只能增加一个用户lisi
    在这里插入图片描述
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值