Linux加强篇-Shell命令脚本

目录

 ⛳️推荐

编写Shell脚本

编写简单的脚本

接收用户的参数

判断用户的参数


 ⛳️推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

编写Shell脚本

Shell脚本命令的工作方式有下面两种。

交互式(Interactive):用户每输入一条命令就立即执行。

批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

通过查看SHELL变量可以发现,当前系统已经默认使用Bash作为命令行终端解释器

[root@localhost ~]# echo $SHELL

/bin/bash

编写简单的脚本

查看当前所在工作路径并列出当前目录下所有的文件及属性信息,第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本;第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,第三、四行的可执行的Linux命令。

[root@localhost ~]# vim example.sh

#! /bin/bash

#for example by weihongbin

pwd

ls -alh

[root@localhost ~]# bash example.sh  

/root

total 2.1G

dr-xr-x---.  17 root    root    4.0K Nov 15 14:05 .

dr-xr-xr-x.  18 root    root     254 Nov  8 15:40 ..

-rw-r--r--.   1 root    root    560M Nov  8 15:53 560

也可以用./来执行bash文件

接收用户的参数

Linux系统中的Shell脚本语言内设了用于接收参数的变量,变量之间使用空格间隔,

对应的是当前

脚本程序的名称,0对应的是当前Shell脚本程序的名称,0对应的是当前Shell脚本程序的名称,#对应的是总共有几个参数,

对应的是所有位置的参数值,∗对应的是所有位置的参数值,*对应的是所有位置的参数值,?对应的是显示上一次命令的执行返回值,而

、1、1、2、$3……则分别对应着第N个位置的参数值

image

[root@localhost ~]# vim example.sh

#! /bin/bash

#for example by weihongbin

echo "当前脚本名称为$0"

echo "总共有$#个参数,分别是$*。"

echo "第1个参数为$1,第5个为$5。"

[root@localhost ~]# bash example.sh one two three four five six

当前脚本名称为example.sh

总共有6个参数,分别是one two three four five six。

第1个参数为one,第5个为five。

判断用户的参数

按照测试对象来划分,条件测试语句可以分为4种:

文件测试语句;

逻辑测试语句;

整数值比较语句;

字符串比较语句。

image

文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符

 文件测试所用参数

操作符作用
-d测试文件是否为目录类型
-e测试文件是否存在
-f判断是否为一般文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行

使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着它不是目录,这个目录不存在:

[root@localhost ~]# [ -d /etc/fstab ]

[root@localhost ~]# echo $?

1

再使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:

[root@localhost ~]# [ -f /etc/fstab ]

[root@localhost ~]# echo $?

0

Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev文件是否存在,若存在则输出Exist字样

[root@localhost ~]# [ -e /dev ] && echo "Exist"

Exist

Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:

[root@localhost ~]# [ $USER = root ] || echo "user"

[root@localhost ~]# su - centos8

Last login: Wed Nov 15 10:38:34 CST 2023 on tty2

[centos8@localhost ~]$ [ $USER = root ] || echo "user"

user

Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值,判断当前用户是否为一个非管理员的用户。由于判断结果因为两次否定而变成正确,因此会正常地输出预设信息:

[root@localhost ~]# [ ! $USER = root ] || echo "administrator"

administrator

&&是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。

||是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。

!是逻辑“非”,代表对逻辑测试结果取反值;之前若为正确则变成错误,若为错误则变成正确。

先判断当前登录用户的USER变量名称是否等于root,然后用逻辑“非”运算符进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户。最后若条件成立,则会根据逻辑“与”运算符输出user字样;若条件不满足,则会通过逻辑“或”运算符输出root字样,而只有在前面的&&不成立时才会执行后面的||符号。

[root@localhost ~]# [ ! $USER = root ] && echo "user" || echo "root"

root

使用规范的整数比较运算符来进行操作。

可用的整数比较运算符

操作符作用
-eq是否等于
-ne是否不等于
-gt是否大于
-lt是否小于
-le是否等于或小于
-ge是否大于或等于

使用free -m命令查看内存使用量情况(单位为MB),然后通过“grep Mem:”命令过滤出剩余内存量的行,再用awk '{print $4}'命令只保留第4列。

[root@localhost ~]# free -m | grep Mem:

Mem:           1790        1139          87          33         563         465

[root@localhost ~]# free -m | grep Mem: | awk '{print $4}'

86

输出结果赋值给一个变量,以方便其他命令进行调用:

[root@localhost ~]# freemem=`free -m | grep Mem: | awk '{print $4}'` && echo $freemem

86

使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样:

[root@localhost ~]# [ $freemem -lt 1024 ] && echo "Insufficient Memory"

Insufficient Memory

字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。

常见字符串比较运算符

操作符作用
=比较字符串内容是否相同
!=比较字符串内容是否不同
-z判断字符串内容是否为空

通过判断String变量是否为空值,进而判断是否定义了这个变量:

[root@localhost ~]# [ -z $String ] && echo $?

0

当前语系的环境变量值LANG不是英语(en.US)时,则会满足逻辑测试条件并输出“Not en.US”(非英语)的字样:

[root@localhost ~]# [ ! $LANG = "en.US" ] && echo "Not en.US"

Not en.US

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/644397.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql server 恢复数据库、单表数据的方法

1、查看备份文件在哪个路径、一般文件夹名都是叫:Backup 2、下面开始还原(恢复)数据库,对着【数据库】右键--【新建数据库】--然后随便命名,如下图 3、你要是想改路径的话就拉过来,2行都要改、不想多事就直…

电力厂推土车倾斜角度预警系统的设计与应用

引言 在电力厂等工业生产现场,推土车作为一种重要的运输设备,广泛应用于各种材料和物品的搬运工作。然而,推土车在行驶过程中,特别是在不平坦的地面上,容易发生侧倾甚至翻车的危险情况。为了有效预防这类安全事故的发…

安捷伦Agilent N5230A 300KHZ至20G矢量网络分析仪

安捷伦Agilent N5230A 300KHZ至20G矢量网络分析仪 N5230A主要参数 2端口300KHz—6、13.5GHz 2端口300KHz—20、40、50GHz 4端口300KHz—20GHz,具有混模S参数和高级夹具校正功能 测量S参数和增益压缩的频率和功率扫描 基本混频器/转换器测量 低至2μs脉冲宽度…

大模型的实践应用22-谷歌Gemma AI大模型的架构原理,以及Gemma模型的部署安装本地教程

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用22-谷歌Gemma AI大模型的架构原理,以及Gemma模型的部署安装本地教程。谷歌Gemma AI大模型是由Google AI团队开发并开源。Gemma模型采用Transformer编码器-解码器架构,并加入了一些改进,例如使用稀疏注意力机制来提高推…

水平越权,垂直越权

水平越权和垂直越权 水平越权 首先自己创建一个账号 然后在自己的修改密码,抓包,修改用户名等 但一般都会固定,它会固定当前用户名 垂直越权 不用登录就可以删除 当我们复制管理员的删除地址,然后访问它 它会跳出登录地址&#…

javaWeb项目-社区医院管理服务系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Java技术 Java语…

【软件基础】反编译工具dnSpy反编译程序步骤

文章目录 一、dnSpy介绍二、使用版本三、使用步骤 一、dnSpy介绍 dnSpy是一款开源的.NET程序集反编译工具,它允许用户查看和编辑.NET程序集的源代码。dnSpy支持反编译.NET程序集、查看IL代码、编辑IL代码、调试.NET程序集等功能。用户可以使用dnSpy来分析和理解.NE…

Android SDK Manager安装Google Play Intel x86 Atom_64 System Image依赖问题

Package Google Play Intel x86 Atom_64 System Image,Android API R, revision 2 depends on SDK Platform Android R Preview, revision 2 问题 一开始以为网络还有依赖包没有勾选,尝试了很多次,勾选这边报错对应的license即可。此时点击一下其他licen…

数据库轻松切换:解读Spring中的AbstractRoutingDataSource

欢迎来到我的博客,代码的世界里,每一行都是一个故事 数据库轻松切换:解读Spring中的AbstractRoutingDataSource 前言AbstractRoutingDataSource介绍作用和优势:作用:优势: 使用 AbstractRoutingDataSource …

【Bugku-web】my-first-sqli

1.打开场景,用户名输入1 or 1 1 -- -,密码随便输。 2.得到flag值

Linux——NFS网络文件系统

在生产环境中共享宿主目录可以用于集中管理账户 一、存储设备 DAS 是直连存储相当于移动硬盘 NAS 是网络文件系统,挂载后可以直接访问 SAN 存储区域网络 IPSAN 网线连接 共享的是设备,需要挂载后分区使用 FCSAN 光纤连接 二、服务的管理 1、安…

Go Sync并发包之errgroup

你是否写过一个函数,它之所以很长,是因为它要完成很多任务,即使这些任务之间并不相互依赖? 你是否写过一个很长的函数,因为它要完成很多任务,即使这些任务并不相互依赖?我就遇到过这种情况。 想…