目录

  • 一、Shell脚本概述
    • 1.1.Shell脚本的概念
    • 1.2.Shell脚本应用场景
    • 1.3.Shell的作用——命令解释器,“翻译官”
    • 1.4.用户的登录Shell
  • 二、Shell脚本基础
    • 2.1.Shell的作用
    • 2.2.什么是shell脚本?及构成
    • 2.3.脚本执行逻辑及执行方式
  • 三、使用Shell脚本搭建yum本地仓库
    • 3. 1.在yum仓库里进行操作
    • 3.2.实施效果
    • 3.3.设置ping的限定次数
  • 四、重定向与管道操作
    • 4.1交互式硬件设备
    • 4.2从一个文件传输到另一个文件,并计算结果。
    • 4.3转移文件
  • 五、变量
    • 5.1变量基础
    • 5.2自定义变量

一、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.shcd /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 1500inet 192.168.157.101  netmask 255.255.255.0  broadcast 192.168.157.255inet6 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 0TX 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

赋值先后的区别

一起来了解Shell脚本相关推荐

  1. jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理

    准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...

  2. 快速给shell脚本加上使用提示

    我们只需通过在shell脚本前面加上如下的代码即可: #!/bin/bash ### ### my-script - does one thing well ### ### Usage: ### my ...

  3. Ubuntu系统执行shell 脚本的方法

    使用前了解 Shell: Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁 Shell: Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 下面 ...

  4. Windows 系统执行Shell 脚本的方法

    使用前了解 Shell: Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁 Shell: Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 下面 ...

  5. shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务

    简介 最近运维人员提出需求,增加一个运维页面, 查询当前的业务进程信息包括:进程名称.启动命令.启动时间.运行时间等,可以通过页面点击重启按钮,可以重启后端的一系列系统进程. 思路 java程序获取l ...

  6. linux 脚本 alias,在shell脚本中使用alias别名

    本文最后更新于2015年7月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! 缘由: 经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell ...

  7. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...

    今天为大家带来的内容是:(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤 本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章 ...

  8. linux重启sh脚本,Linux 之shell脚本系列之服务启动/关闭/重启/状态

    一 问题 自己开发的程序,如何用shell 脚本实现 启动,关闭,重启,查看状态? 二 方案 myshell.sh #!/bin/sh SERVICE="fm_tuoguan_shell&q ...

  9. linux按文件名排序ls,linux – 如何使用shell脚本按名称对文件进行排序

    我想用 Shell脚本按日期排序所有文件. 例如,在/ Users / KanZ / Desktop / Project / Test /中有文件M1.h,A2.h和F4.h. 每个文件都有不同的时间 ...

  10. linux 脚本 符号,Shell脚本 入门 —— 符号篇

    shell变量 shell变量不需要进行任何声明,直接定义即可,因为shell变量的值实际上都是字符串(对于没有定义的变量默认是一个空串).定义的时候shell变量由大写字母加下划线组成,并且定义的时 ...

最新文章

  1. 清华学长手把手带你做UI自动化测试
  2. MFC接收命令行参数的三种方法
  3. Python图像处理库:PIL中Image,ImageDraw等基本模块介绍
  4. 马来西亚国立大学的计算机,要拿到马来西亚国立大学的 offer难吗?
  5. 信息系统项目管理师论文指导(2/3)
  6. ctype.h(cctype) 头文件函数大全
  7. 新窗口打开html页面,网页是选择新窗口打开还是原窗口打开?
  8. OCR 工具tesseract初体验
  9. hdu 6397 Character Encoding
  10. Python 编写规范
  11. 分位数回归-Quantile regression
  12. 一个软件系统的兼容性测试,在兼容性测试中,如何判断软件的兼容性?
  13. c语言程序设计 自考,自考“C语言程序设计”模拟试题九
  14. 架构师之路读书会 | 15分钟一本,让我为你精读100本好书,快来加入吧!
  15. 为什么中国难以诞生像SAP、甲骨文一样的企业级服务公司?
  16. 天盾linux数据恢复,天盾Mac数据恢复软件
  17. 相机视频展示开源平台ISpy
  18. 《闲扯Redis九》Redis五种数据类型之Set型
  19. matlab通过数据进行曲线拟合 导出公式
  20. 身份证阅读器(新中新)写入受保护内存问题,已解决

热门文章

  1. Grunt 单独对css压缩并生成min.css文件
  2. 【云原生Docker系列项目实战第一篇】dockerfile+lnmp+workpress(星星温柔泛滥,人间至善)
  3. 机器学习之SVM介绍
  4. 《孤独六讲》-蒋勋 摘录1
  5. 第十五届全国青少年信息学奥林匹克联赛初赛试题
  6. 漫画 | 为什么中国没有搞出浏览器引擎?
  7. 做好站内站外优化,网站SEO优化效果才能一步到位!
  8. 原型设计展示【与莫多的初次合作】
  9. layer.tips换行问题(解决layui tips连续英文和数字不换行问题)
  10. matlab 毕业论文题目,与matlab相关主题论文_基于matlab的论文题目_论文翻译器