SHEEL脚本编程

一、shell基本知识

Ⅰ、为什么要学习和使用shell编程

通过编程,简化日常的维护工作,使得管理员从简单的重复劳动解脱出来

Ⅱ、什么是shell

shell的功能

Shell又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于Windows操作系统中的命令行,但是,Shell的功能远比命令行强大的多。在UNIX或者localhost中,Shell既是用户交互的界面,也是控制系统的脚本语言。

shell的分类

Bourne Shell:标识为sh,该Shell由Steve Bourne在贝尔实验室时编写。在许多Unix系统中,该Shell是root用户的默认的Shell。

Bourne-Again Shell:标识为bash,该Shell由Brian Fox在1987年编写,是绝大多数localhost发行版的默认的Shell。

Korn Shell:标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。

C Shell:标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。

查看当前系统支持的shell?

[root@localhost ~]# cat /etc/shells

查看当前系统支持的shell?

[root@localhost ~]# echo $SHELL

Ⅲshell脚本的书写规范

  • 通常情况下,我们会给shell脚本起名为filename.sh

  • 第一行写声明,声明当前的shell脚本使用哪个命令解释器:#!/bin/bash

  • 除了第一行以外,以#开头的行都为注释

    • shell脚本的作者

    • shell脚本的创建时间

    • 脚本的作用,命令的说明

#编辑.sh文件时自动生成关于脚本的注释
[root@localhost ~]# cat /root/.vimrc

#用vim创建新文件会自动生成脚本文件的注释
注:用touch命令创建不会自动生成脚本文件的注释

Ⅳ、shell脚本的执行方式

交互式执行

[root@localhost ~]# for filename in `ls /etc`
> do
> if echo "$filename" | grep "passwd"
> then
> echo "$filename"
> fi
> done

作为程序文件执行(常用)

对于一组需要经常重复执行的Shell语句来说,将它们保存在一个文件中来执行。我们通常称这种包 含多个Shell语句的文件为Shell脚本,或者Shell脚本文件。脚本文件是普通的文本文件,可使用任何的 文本编辑器查看或修改Shell脚本。

[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# vim test1.sh
#!/bin/bash
#########################
#File name:test1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-02 14:56:01
#Description:
#########################
for filename in `ls /etc`
doif echo "$filename" | grep "passwd"thenecho "$filename"fi
done

Ⅴ、实行脚本的方法

bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行)

./filename.sh(产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x权限)

source ./filename.sh(source命令是一个shell内部命令,其功能是读取指定的shell程序文件,并且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创建的变量都会保存到当前的shell里面)

. ./filename.sh(和source一样,也是使用当前进程执行)

示例:

[root@localhost test]# vim test2.sh
#!/bin/bash
#########################
#File name:test2.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-02 15:14:39
#Description:
#########################
cd /tmp
pwd

 

注:执行shell脚本时,如果使用1和2这种方式执行会在当前的进程下产生一个新的bash子进程,所以子进程切换到了/tmp目录,当脚本结束,子进程也就结束了,所以当前进程的目录不会发生变化;3和4方式执行时,不会产生新的进程,所以脚本执行结束后当前的目录会变成/tmp

[root@localhost tmp]# cd -		返回上一级目录

Ⅵ、shell脚本的退出状态码

  • 在UNIX或者Linux中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为0~255。通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码。行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。

  • Shell脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定退出状态码。另外,用户也可以在脚本中使用exit语句将指定的退出状态码传递给Shell。

  • 可以使用exit num指定脚本的退出状态码。

 

[root@localhost ~]# echo $?		查看上一条命令的状态码 
上一条命令执行成功状态码为0;执行失败为2

 

二、shell的变量

Ⅰ、什么是变量

变量就是程序设计语言中可以变化的量,本质上来讲,变量就是在程序中保存用户数据的一块内存空间。而变量名就是这块内存空间的地址。

Ⅱ、变量的命令

  • 可以使用数字、字母和下划线给变量命名

  • 不能用数字开头

  • 如果给同一个变量赋值多次,最后一次赋值会覆盖之前的值

合法的变量名:name、NAME、name_1、Name_1

不合法的变量名:1name、name*1、name_1%

Ⅲ、查看变量的值

  • 查看单个变量的

[root@localhost ~]# uid=123		定义一个变量
[root@localhost ~]# echo $uid
123
[root@localhost ~]# echo ${uid}
123
[root@localhost ~]# printf "$uid\n"
123
[root@localhost ~]# printf "${uid}\n"
123
如果后两种方式不加\n
[root@localhost ~]# printf "$uid"
123[root@localhost ~]#

查看多个变量的值

  • set:查看所有的变量和函数

  • declare:查看所有的变量和函数

  • env:显示所有的全局变量

 

Ⅳ、变量的定义

  • 在命令行中定义:退出当前进程后该变量就失效,其他终端上无法使用该变量

  • 在文件中定义:永久生效

    • 当前用户生效的文件

      ~/.bashrc 和~/.bash_profile

    • 所有用户生效的文件

      /etc/bashrc、/etc/profile、/etc/profile.d/*.sh

su和su - 切换方式加载的文件不同

Ⅴ、变量的分类

Ⅵ、取消变量

[root@localhost etc]# unset var

 

Ⅶ、变量运算

实验:计算用户输入的任意两个整数和、差、乘积、商、余数

方法一:

[root@localhost test]#vim mkdir test4.sh
#!/bin/bash
#########################
#File name:test3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-02 16:13:53
#Description:
#########################
a=$1
b=$2
echo a+b=$((a+b))
echo a-b=$((a-b))
echo a*b=$((a*b))
echo a/b=$((a/b))
echo a%b=$((a%b))

 方法二:

#!/bin/bash
#########################
#File name:test3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-02 16:13:53
#Description:
#########################
read -p "please input tow number:" a b
echo $a+$b=$(($a+$b))
echo $a-$b=$((a-b))
echo $a*$b=$((a*b))
echo $a/$b=$((a/b))
echo $a%$b=$((a%b))

 示例:截取字符串

[root@localhost test]# str1="I love RHCE"		定义变量
[root@localhost test]# echo ${str1}				返回变量内容
I love RHCE
[root@localhost test]# echo ${#str1}			返回变量长度
11
[root@localhost test]# echo ${str1:1}			从I之后截取搭到结束
love RHCE
[root@localhost test]# echo ${str1:1:3}			从I之后截取三位
lo
[root@localhost test]# echo ${str1::3}			指定长度,不指定索引位置从头开始
I l

 

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

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

相关文章

三、Kafka集群

一、Kafka集群的概念 1、目的 高并发、高可用、动态扩展。 主备数据架构、双活节点、灾备数据中心。 如果是服务的地理范围过大也可以使不同的集群节点服务不同的区域,降低网络延迟。 2、Kafka集群的基本概念 1)复制(镜像) kaf…

关于Android Studio Koala Feature Drop | 2024.1.2下载不了插件的解决办法

解决 androidStudio Settings->Plugins下载插件,点击install后没反应,同时插件描述相关显示不出来 第一步: 第二步: 点击设置,勾选Auto-detect proxy settings,输入网址 https://plugins.jetbrains.com…

笔记本双系统win10+Ubuntu 20.04 无法调节亮度亲测解决

sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get update sudo apt-get install brightness-controller-simple 安装好后找到一个太阳的图标,就是这个软件,打开后调整brightness,就可以调整亮度,可…

若依微服务架构遇到的一些问题记录

一、nacos启动问题 需要看官网的准备工作,认真看,版本问题卡了两天 https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C 1.下载nacos,版本需要对应上 版本说明链接 2.记得运行数据库&#xff0…

Linux_shell编程

shell介绍 概念: 用户编写的shell命令通过shell解释器解释后交给linux内核去执行. shell是一个程序(解释器程序) 用户和linux内核的桥梁. Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理 Shell 将相应的操作传…

Java 多线程(八)—— 锁策略,synchronized 的优化,JVM 与编译器的锁优化,ReentrantLock,CAS

前言 本文为 Java 面试小八股,一句话,理解性记忆,不能理解就死背吧。 锁策略 悲观锁与乐观锁 悲观锁和乐观锁是锁的特性,并不是特指某个具体的锁。 我们知道在多线程中,锁是会被竞争的,悲观锁就是指锁…

国内PLC市场份额报告,西门子老大的地位从未动摇

【导读】国内PLC市场占有率,西门子依然是老大。 PLC市场集中度很高,从销售额来看,TOP3厂家占据一半以上的市场份额,以外资品牌为主,其中西门子排名第一,2022年市场份额约47.1%;三菱排名第二&…

使用uniapp + Vue3 + uni.createInnerAudioContext()实现播放歌曲及歌词滚动、拖动进度条

一、大致效果 二、使用步骤 1.歌词详情页代码块 <template><view class"play"><view class"play_centent" :style"{ background-image: url( playInfo.siPic ) }"><div class"cover-mask" style"opacit…

无人机维护保养、部件修理更换技术详解

无人机作为一种精密的航空设备&#xff0c;其维护保养和部件修理更换是确保飞行安全、延长使用寿命的重要环节。以下是对无人机维护保养、部件修理更换技术的详细解析&#xff1a; 一、无人机维护保养技术 1. 基础构造理解&#xff1a; 熟悉无人机的基本构造&#xff0c;包括…

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff0c;分别…

【运动的&足球】足球场景目标检测系统源码&数据集全套:改进yolo11-ASF-P2

改进yolo11-RetBlock等200全套创新点大全&#xff1a;足球场景目标检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.03 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或…

【STM32】GPIO通用输入输出口

文章目录 一、GPIO的概念二、STM32中GPIO的基本结构三、GPIO位结构输入部分分析输出部分分析GPIO的8种模式 四、GPIO相关函数 一、GPIO的概念 GPIO&#xff08;General Purpose Input Output&#xff09;&#xff0c;意为通用输入输出口&#xff0c;在嵌入式系统中&#xff0c;…

华为荣耀曲面屏手机下面空白部分设置颜色的方法

荣耀部分机型下面有一块空白区域&#xff0c;如下图红框部分 设置这部分的颜色需要在themes.xml里面设置navigationBarColor属性 <item name"android:navigationBarColor">android:color/white</item>

电子电气架构 --- 整车控制系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏&#xff08;0.96寸 1.3寸通用&#xff09;0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕&#xff0c;易修改为DMA控制STM32驱…

iOS 18.2 可让欧盟用户删除App Store、Safari、信息、相机和照片应用

升级到 iOS 18.2 之后&#xff0c;欧盟的 iPhone 用户可以完全删除一些核心应用程序&#xff0c;包括 App Store、Safari、信息、相机和 Photos 。苹果在 8 月份表示&#xff0c;计划对其在欧盟的数字市场法案合规性进行更多修改&#xff0c;其中一项更新包括欧盟用户删除系统应…

[前端] 为网站侧边栏添加搜索引擎模块

前言 最近想给我的个人网站侧边栏添加一个搜索引擎模块&#xff0c;可以引导用户帮助本站SEO优化&#xff08;让用户可以通过点击搜索按钮完成一次对本人网站的搜索&#xff0c;从而实现对网站的搜索引擎优化&#xff09;。 最开始&#xff0c;我只是想实现一个简单的百度搜索…

C++ STL 学习指南:带你快速掌握标准模板库

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 大家好呀&#xff01;&#x1f917; 今天我们来聊一聊 C 程序员的必备神器——STL&#xff08;Standard Template Library&#xf…

Oracle视频基础1.3.5练习

Oracle视频基础1.3.4练习 1.3.5 检查数据库启动状态 ps -ef | grep oracle ipcs clear演示alter向前向后改database阶段 sqlplus /nolog conn / as sysdba startup mount alter database nomount # 报错 alter database open启动restricted mode&#xff0c;创建一个connect&…

Unity3D包管理bug某些版本Fbx Exporter插件无法搜索到的问题

这个问题是在使用unity的时候发现的 有些版本里没有Fbx Exporter插件也是没法搜到 经过测试&#xff0c;在package manager中开启Enable Preview Packages也没有用 这个插件在2020已经是正式版了&#xff0c;不需要再开启 后来发现可能是版本bug 需要手动开启 在工程的Pac…