首页 网站首页 商业信息 脚本 查看内容

一步一步了解并搞懂shell脚本

全网营销 2023-7-28 18:22 7299人围观 脚本

一步一步领会并搞懂shell剧本

提醒:本文为合集文章,后续延续更新!

关注我延续进步!

Shell剧本并不能作为正式的编程说话,由于它是在Linux的shell中运转的,所以称为shell剧本。究竟上,shell剧本就是一些号令的调集。比如,我想实现这样的操纵:

(1) 进入/tmp/目录;

(2) 列出当前目录中一切的文件名;

(3) 把一切当前的文件复制到/root/目录下;

(4) 删除当前目录下一切的文件。

完成以上简单的4步需要在shell窗口中输入4次号令,按4次回车,这不算太难。但假如是输入复杂的号令,一次一次敲键盘会很麻烦。我们无妨把一切的操纵都记录到一个文档中,然后去挪用文档中的号令,这样一步操纵便可以完成。实在这个文档就是shell剧本,只是这个shell剧本有它特别的格式。

Shell剧本能帮助我们很方便地治理办事器,由于我们可以指定一个使命计划,按时去履行某个shell剧本以满足需求。这对于Linux系统治理员来说是一件很是值得自豪的工作。我们可以在Linux办事器上摆设监控的shell剧本,然后剧本中可以加上邮件告诉来告之出现故障。比如,网卡流量出现异常大概Web办事器停止办事,便可以发一封邮件给治理员。这样可以让治理员实时晓得办事器出题目了。

在正式编写shell剧本之前,阿铭倡议凡是自界说的剧本都放到/usr/local/sbin/目录下。这样做的目标是:一来可以更好地治理文档;二来今后接收你工作的治理员都晓得自界说剧本放在那里,方便保护。

13.1.1 shell剧本的建立和履行

下面请随着阿铭编写第一个shell剧本,以下所示:

# cd /usr/local/sbin/# vim first.sh //加入以下内容#! /bin/bash## This is my first shell script.## Writen by Aming 2022-12-02.dateecho "Hello world!"

shell剧本凡是都以.sh为后缀名。这并不是说不加.sh的剧本就不能履行,只是大师的一个习惯而已。所以,今后假如发现了以.sh为后缀的文件,那末它能够是一个shell剧本。本例中,剧本文件first.sh的第1行要以#! /bin/bash开首,暗示该文件利用的是bash语法。假如不设备该行,你的shell剧本也可以履行,可是不合适标准。#暗示正文,前面跟一些该剧本的相关正文内容,以及作者、建立日期大概版本等。固然,这些正文并非必须的,但阿铭不倡议省略。由于随着工作时候的逐步过渡,写的shell剧本也会越来越多,倘使有一天你回头检察自己写过的某个剧本,很有能够忘记该剧本是用来干什么的以及什么时辰写的。所以写上正文是有需要的。别的,系统治理员并非只要你一个,写上正文有助于其他治理员检察你的剧本。

下面我们履行一下这个剧本,以下所示:

# sh first.shFri Dec  2 22:16:56 CST 2022Hello world!

实在shell剧本还有一种履行方式,以下所示:

# ./first.sh-bash: ./first.sh: 权限不够# chmod +x first.sh# ./first.shFri Dec  2 22:16:56 CST 2022Hello world!

利用该方式运转shell剧本的条件是剧本自己有履行权限,所以需要给剧本加一个x权限。别的,利用sh号令履行一个shell剧本时,可以加-x选项来检察这个剧本的履行进程,这样有益于我们调试这个剧本。以下所示:

# sh -x first.sh+ dateFri Dec  2 22:17:43 CST 2022+ echo 'Hello world!'Hello world!

本例中有一个date号令,之前阿铭从未先容过,这个号令在shell剧本中利用很是频仍,是以有需要先容一下它的用法。

13.1.2 号令date

date号令在shell剧本中最常用的几个用法以下。

  • date +%Y:暗示以四位数字格式打印年份。
  • date +%y:暗示以两位数字格式打印年份。
  • date +%m:暗示月份。
  • date +%d:暗示日期。
  • date +%H:暗示小时。
  • date +%M:暗示分钟。
  • date +%S:暗示秒。
  • date +%w:暗示星期。成果显现0则暗示周日。

下面阿铭举几个比力适用的例子来帮助你把握date号令的用法,示例代码以下:

# date +"%Y-%m-%d %H:%M:%S"2022-12-02 22:18:03

偶然,在剧本中会用到一天前的日期,以下所示:

# date -d "-1 day" +%d01

大概一小时前,以下所示:

# date -d "-1 hour" +%H21

甚至一分钟前,以下所示:

# date -d "-1 min" +%M17


13.2 shell剧本中的变量

在shell剧本中利用变量会使我们的剧本加倍专业,更像是一门说话。假如你写了一个长达1000行的shell剧本,而且剧本中屡次出现某一个号令大概途径,而你感觉途径差池想点窜一下,就得一个一个点窜,大概利用批量替换的号令点窜。这样做很麻烦,而且剧本也显得臃肿了很多。变量就是用来处理这个题目标。界说变量的格式为:“变量名=变量的值”。在剧本中援用变量时需要加上标记$,这跟前面先容的在shell中自界说变量是分歧的。

下面我们编写第一个与变量相关的剧本,以下所示:


# vim variable.sh#! /bin/bash## In this script we will use variables.## Writen by Aming 2022-12-02.d=`date +%H:%M:%S`echo "The script begin at $d."echo "Now we'll sleep 2 seconds."sleep 2d1=`date +%H:%M:%S`echo "The script end at $d1."

本例中利用到了反引号,它的感化是将引号中的字符串当做shell号令履行,返回号令的履行成果。d和d1在剧本中作为变量出现。

下面来看看该剧本的履行成果,以下所示:

# sh variable.shThe script begin at 22:23:04.Now we'll sleep 2 seconds.The script end at 22:23:06.


13.2.1 数学运算

示例号令以下:

# vim sum.sh#! /bin/bash## For get the sum of two numbers.## Aming 2022-12-02.a=1b=2sum=$[$a+$b]echo "$a+$b=$sum"

数学计较要用[ ]括起来,而且前面要加标记$。该剧本的成果以下:

# sh sum.sh1+2=3


13.2.2 和用户交互

示例剧本以下:

# cat read.sh#! /bin/bash## Using 'read' in shell script.## Aming 2022-12-02.read -p "Please input a number: " xread -p "Please input another number: " ysum=$[$x+$y]echo "The sum of the two numbers is: $sum"

read号令用于和用户交互,它把用户输入的字符串作为变量值。该剧本的履行进程以下:

# sh read.shPlease input a number: 2Please input another number: 10The sum of the two numbers is: 12

我们无妨加上-x选项再来看看这个履行进程:

# sh -x read.sh+ read -p 'Please input a number: ' xPlease input a number: 22+ read -p 'Please input another number: ' yPlease input another number: 13+ sum=35+ echo 'The sum of the two numbers is: 35'The sum of the two numbers is: 35


13.2.3 shell剧本预设变量

偶然我们会用到类似/etc/init.d/iptables restart(该号令来历于早期CentOS系统)号令,前面的/etc/init.d/iptables文件实在就是一个shell剧本。剧本前面为什么可以跟一个restart字符串呢?这就触及shell剧本的预设变量了。现实上,shell剧本在履行时,前面可以跟一个大概多个参数。比以下面的剧本:

# vim option.sh //内容以下#! /bin/bashsum=$[$1+$2]echo "sum=$sum"

该剧本的履行成果以下:

# sh -x option.sh 1 2+ sum=3+ echo sum=3sum=3

你能够会问:剧本中的$1和$2是从那里来的?这实在就是shell剧本的预设变量。本例中,$1和$2的值就是在履行时别离输入的1和2,$1就是剧本的第一个参数,$2是剧本的第二个参数,以此类推。固然一个shell剧本的预设变量是没有限制的。

别的还有一个$0,它代表剧本自己的名字。我们无妨把剧本点窜一下,以下所示:

#! /bin/bashecho "$1 $2 $0"

该剧本的履行成果以下:

# sh option.sh 1 21 2 option.sh


13.3 shell剧本中的逻辑判定

假如你学过C等说话,相信你不会对if感应陌生。在shell剧本中,我们一样可以利用if逻辑判定。

13.3.1 不带else

具体魄式以下:

if 判定语句; thencommandfi

示例剧本以下:

# cat if1.sh#! /bin/bashread -p "Please input your score: " aif ((a<60)); thenecho "You didn't pass the exam."fi

if1.sh中出现了((a<60))这样的形式,这是shell剧本中独有的格式,只用一个小括号大概不用城市报错,请记着这个格式。阿铭还会用别的一种格式,前面会先容到。

该剧本的履行成果以下:

# sh if1.shPlease input your score: 90# sh if1.shPlease input your score: 33You didn't pass the exam.


13.3.2 带有else

具体魄式以下:

if 判定语句; thencommandelsecommandfi

示例剧本以下:

# vim if2.sh //内容以下#! /bin/bashread -p "Please input your score: " aif ((a<60)); thenecho "You didn't pass the exam."elseecho "Good! You passed the exam."fi

该剧本的履行成果以下:

# sh if2.shPlease input your score: 80Good! You passed the exam.# sh if2.shPlease input your score: 25You didn't pass the exam.

剧本if2.sh和剧本if1.sh唯一的区分是:假如输入大于或即是60的数字会有提醒。

13.3.3 带有elif

具体魄式以下:

if 判定语句1; thencommandelif 判定语句2; thencommandelsecommandfi

示例剧本以下:

# vim if3.sh //内容以下#! /bin/bashread -p "Please input your score: " aif ((a<60)); thenecho "You didn't pass the exam."elif ((a>=60)) && ((a<85)); thenecho "Good! You pass the exam."elseecho "Very good! Your score is very high!"fi

这里的&&暗示“而且”的意义,固然也可以利用||暗示“大概”。

该剧本的履行成果以下:

# sh if3.shPlease input your score: 90Very good! Your score is very high!# sh if3.shPlease input your score: 60Good! You pass the exam.

以上只是简单先容了if语句的结构。判定数值巨细除了可以用(())的形式外,还可以利用[]。可是不能利用>、<、=这样的标记了,要利用-lt (小于)、-gt(大于)、-le(小于或即是)、-ge(大于或即是)、-eq(即是)、-ne(不即是)。下面阿铭就以号令行的形式简单比力一下,不再写shell剧本。示例代码以下:

# a=10; if [ $a -lt 5 ]; then echo ok; fi# a=10; if [ $a -gt 5 ]; then echo ok; fiok# a=10; if [ $a -ge 10 ]; then echo ok; fiok# a=10; if [ $a -eq 10 ]; then echo ok; fiok# a=10; if [ $a -ne 10 ]; then echo ok; fi

下面是在if语句中利用&&和||的情况,示例代码以下:

# a=10; if [ $a -lt 1 ] || [ $a -gt 5 ]; then echo ok; fiok# a=10; if [ $a -gt 1 ] || [ $a -lt 10 ]; then echo ok; fiok


13.3.4 和文档相关的判定

Shell剧本中if还经常用于判定文档的属性,比如判定是普通文件还是目录,判定文件能否有读、写、履行权限等。if常用的选项有以下几个。

  • -e:判定文件或目录能否存在。
  • -d:判定能否是目录以及能否存在。
  • -f:判定能否是普通文件以及能否存在。
  • -r:判定能否有读权限。
  • -w:判定能否有写权限。
  • -x:判定能否可履行。

利用if判按时的具体魄式以下:

if [ -e filename ] ; thencommandfi

示例代码以下:

# if [ -d /home/ ]; then echo ok; fiok# if [ -f /home/ ]; then echo ok; fi

由于/home/是目录而非文件,所以并不会显现ok。其他示例以下所示:

# if [ -f /root/test.txt ]; then echo ok; fiok# if [ -r /root/test.txt ]; then echo ok; fiok# if [ -w /root/test.txt ]; then echo ok; fiok# if [ -x /root/test.txt ]; then echo ok; fi# if [ -e /root/test1.txt ]; then echo ok; fi


感激阅读,关注我延续进步!

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

查看全部评论>>

相关推荐

有哪些超神的油猴脚本?

有哪些超神的油猴脚本?

小编在之前就介绍过很多油猴里的神器插件,这里给大家总结几款经典中的经典。01Usersc

一篇教会你写90%的shell脚本

一篇教会你写90%的shell脚本

shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统

脚本怎么写?250+个万能脚本,可直接套用!

脚本怎么写?250+个万能脚本,可直接套用!

作者:厚昌学院特聘讲师,厚昌学院顾问团队核心成员,从事互联网行业从事互联网行业8

浏览器辅助神器:油猴脚本使用教程

浏览器辅助神器:油猴脚本使用教程

前言「油猴脚本」是一段脚本代码,通过它可以让浏览器实现各种各样的扩展功能,和浏览

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

关注扩展迷、喜欢折腾电脑的小伙伴们,应该都对各种各样的浏览器插件不陌生了。浏览器

最强浏览器插件:油猴脚本的安装及使用教程

最强浏览器插件:油猴脚本的安装及使用教程

Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome,

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看油猴可以帮你干什么:全网VIP视

iPad随航脚本(Mac13.0Ventura)

iPad随航脚本(Mac13.0Ventura)

参考文章和视频:将iPad作为Mac Mini主屏幕的实现方法视频:无屏自动启动随航 iPad作为M

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

在运营短视频时,你有没有遇到过这样的问题:1、拍了一半发现拍摄场景不行;2、拍摄过

一个油猴脚本,让你体验真正的百度网盘下载不限速!

一个油猴脚本,让你体验真正的百度网盘下载不限速!

我们先看一下这个脚本的下载效果。我是100M的宽带,这直接能飙到20MB/s,所以下载速度

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

写脚本?对于没有视频背景的朋友来说可能就会有疑问,脚本是什么?不应该是电影,电视

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C大家好,我是Stark-

Tampermonkey油猴插件——安装与使用教程

Tampermonkey油猴插件——安装与使用教程

​初次见面,大家好。相信熟悉浏览器的都知道,尤其是大名鼎鼎的Chrome浏览器,丰富的

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

从历史上看,shell一直是类Unix系统的原生命令行解释器。多年来,它已被证明是Unix的

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

有人说,网红行业的现状是江山代有才人出,各领风骚“好几天”。的确,即便是行业顶流

115最新转存脚本(可转存和提取SHA1版本)

115最新转存脚本(可转存和提取SHA1版本)

最近115调整了接口,导致115转存助手ui优化版3.8.1版本无法转存或获取SHA1。有大神在

视频脚本创作不完全指南

视频脚本创作不完全指南

根据第49次《中国互联网络发展状况统计报告》数据,截至2022年12月,我国网络视频(含

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

Shell脚本编程难,难于上青天!这话不假,尤其很多程序员新人,学了几个月Shell脚本写

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

在上期我们做了个形象的比喻,把短视频制作比喻成我们造房子,前面我们已经带领大家打

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信