一起来了解Shell脚本

一、Shell脚本概述

1.1.Shell脚本的概念

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

1.2.Shell脚本应用场景

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

1.3.Shell的作用——命令解释器,“翻译官”

  • 介于系统内核与用户之间,负责解释命令行
    在这里插入图片描述

1.4.用户的登录Shell

登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别

[root@localhost data]# cd
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

二、Shell脚本基础

2.1.Shell的作用

  • linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
  • 常见的Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。
  • 通过 /etc/shells 文件可以了解当前系统所支持的Shell脚本种类。

查看本机的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
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

2.2.什么是shell脚本?及构成

  • 就是使用按顺序将命令——列出,最后自动执行
  • 执行需要权限,也可以调用
  • 脚本其实不复杂,通用脚本环境改变后依旧可以使用的脚本构成

可执行语句:比如echo命令用于输出“ ”之间的字符串

[root@localhost ~]# vim frist.sh
[root@localhost ~]# cat frist.sh 
echo "hello world"
[root@localhost ~]# ./frist.sh
-bash: ./frist.sh: 权限不够
[root@localhost ~]# chmod +x ./frist.sh 
[root@localhost ~]# ./frist.sh
hello world

2.3.脚本执行逻辑及执行方式

  • 脚本执行逻辑:
    1.顺序执行:程序按从上到下顺序执行
    2.选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
    3.循环执行:程序执行过程中需要重复执行多次某段语句

执行方式:
1.指定路径去执行文件(需要有执行权限)
1.[root@localhost ~]# chmod +x /root/host.sh
2.指定相对路径 ./host.sh
3.指定绝对路径 /root/host.sh
2.指定解释去去执行(不需要权限)
1. [root@localhost ~]# bash host.sh 192.168.157.1

三、使用Shell脚本搭建yum本地仓库

3. 1.在yum仓库里进行操作

[root@localhost ~]# vim yum.sh

cd /etc/yum.repos.d
mkdir aa
mv *.repo aa
echo "[qwe]
name=qwe
baseurl=file:///mnt 
gpgcheck=0  
enabled=1" >bb.repo 
mount /dev/sr0 /mnt 
yum clean all
yum install tree -y

[root@localhost ~]# ./yum.sh

3.2.实施效果

[root@localhost ~]# vim yum.sh
[root@localhost ~]# cat yum.sh
cd /etc/yum.repos.d
mkdir aa
mv *.repo aa
echo "[qwe]
name=qwe
baseurl=file:///mnt 
gpgcheck=0  
enabled=1" >bb.repo 
mount /dev/sr0 /mnt 
yum clean all
yum install tree -y
[root@localhost ~]# ./yum.sh
-bash: ./yum.sh: 权限不够
[root@localhost ~]# chmod +x ./yum.sh
[root@localhost ~]# ./yum.sh
mount: /dev/sr0 写保护,将以只读方式挂载
已加载插件:fastestmirror, langpacks
正在清理软件源: qwe
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
已加载插件:fastestmirror, langpacks
qwe                                               | 3.6 kB     00:00     
(1/2): qwe/group_gz                                 | 156 kB   00:00     
(2/2): qwe/primary_db                               | 3.1 MB   00:00     
Determining fastest mirrors
正在解决依赖关系
--> 正在检查事务
---> 软件包 tree.x86_64.0.1.6.0-10.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=========================================================================
 Package       架构            版本                   源            大小
=========================================================================
正在安装:
 tree          x86_64          1.6.0-10.el7           qwe           46 k

事务概要
=========================================================================
安装  1 软件包

总下载量:46 k
安装大小:87 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : tree-1.6.0-10.el7.x86_64                             1/1 
  验证中      : tree-1.6.0-10.el7.x86_64                             1/1 

已安装:
  tree.x86_64 0:1.6.0-10.el7                                             

完毕!

3.3.设置ping的限定次数

[root@localhost ~]# ping -c 6 192.168.157.2
PING 192.168.157.2 (192.168.157.2) 56(84) bytes of data.
64 bytes from 192.168.157.2: icmp_seq=1 ttl=128 time=0.229 ms
64 bytes from 192.168.157.2: icmp_seq=2 ttl=128 time=0.290 ms
64 bytes from 192.168.157.2: icmp_seq=3 ttl=128 time=0.199 ms
64 bytes from 192.168.157.2: icmp_seq=4 ttl=128 time=0.624 ms
64 bytes from 192.168.157.2: icmp_seq=5 ttl=128 time=0.295 ms
64 bytes from 192.168.157.2: icmp_seq=6 ttl=128 time=0.176 ms

--- 192.168.157.2 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5001ms
rtt min/avg/max/mdev = 0.176/0.302/0.624/0.150 ms

四、重定向与管道操作

4.1交互式硬件设备

标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
在这里插入图片描述

4.2从一个文件传输到另一个文件,并计算结果。

[root@localhost ~]# echo 1 >cat.txt
[root@localhost ~]# echo 1 >>cat.txt
[root@localhost ~]# seq -s+ 100
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18
+19+20+21+22+23+24+25+26+27+28+29+30+31+32
+33+34+35+36+37+38+39+40+41+42+43+44+45+
46+47+48+49+50+51+52+53+54+55+56+57+58+
59+60+61+62+63+64+65+66+67+68+69+70+71+
72+73+74+75+76+77+78+79+80+81+82+83+84
+85+86+87+88+89+90+91+92+93+94
+95+96+97+98+99+100
[root@localhost ~]# seq -s+ 100 > shuzi.txt
[root@localhost ~]# bc < shuzi.txt
5050

4.3转移文件

在这里插入图片描述

五、变量

  • 保存将来会变化的数据,即使数据变化,直接调用变量即可,各种Shell环境中都使用到了“变量”的概念。
  • Shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。
  • 通过使用变量,Shell程序能够提供更加灵活的功能,适应性更强。

5.1变量基础

常见Shell变量的类型包括:

1.自定义变量:由用户自己定义,修改和使用
2.环境变量:由系统维护,用于设置工作环境
3.只读变量:只可以读取不可以更改
4.位置变量:通过命令行给脚本传输参数
5.预定义变量:Bash中内置的一类变量,不能知己修改

赋值并将赋予的值展示出来

[root@localhost data]# class=15
[root@localhost data]# year=2021.10.20
[root@localhost data]# class=ky15
[root@localhost data]# echo $class:$year
ky15:2021.10.20
[root@localhost data]# 

提取IP地址

[root@localhost data]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.157.101  netmask 255.255.255.0  broadcast 192.168.157.255
        inet6 fe80::771:e554:a619:3bf2  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1b:e2:c6  txqueuelen 1000  (Ethernet)
        RX packets 8414  bytes 666940 (651.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5224  bytes 629519 (614.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost data]# ifconfig ens33|awk /netmask/'{print $2}'
192.168.157.101
变量转换
[root@localhost data]# ip1=$(ifconfig ens33|awk /netmask/'{print $2}')
[root@localhost data]# echo $ip1
192.168.157.101

5.2自定义变量

5.2.1赋值时使用引号

  • 双引号:允许通过$符号引用其他变量值

  • 单引号:禁止引用其他变量值, $视为普通字符

  • 反撇号:命令替换,提取命令执行后的输出结果

  • {}可以分隔变量值

5.2.2 从键盘输入内容为变量赋值

[root@localhost data]# read -p "请输入一个数字:" num
请输入一个数字:888
[root@localhost data]# echo $num
888

5.2.3Shel脚本录信息

[root@localhost data]# vim 1.sh
[root@localhost data]# sh 1.sh
请输入你的信息ky15
ky15
[root@localhost data]# cat 1.sh
#!/bin/bash
echo -n "请输入你的信息"
read info
echo $info

赋值先后的区别
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老赵学coding

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

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

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

打赏作者

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

抵扣说明:

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

余额充值