shell脚本和变量

一、shell脚本

脚本就是可以运行的代码的集合,脚本语言(计算机语言)的特点是:从上到下,按行执行。

LINUX中的shell脚本是运行在shell环境中(/bin/bash),bash是shell的解释器。shell脚本是在Linux环境下的编程语句。

1、 shell的解释器

    sh :  bash的早期版本,已经基本淘汰了

    bash : sh的扩展版,linux默认的解释器就是bash

    csh : 类C语言

    tcsh : 整合了C语言的shell

    nologin : 用户无法登录系统的shell

2、 shell的作用

 1. 自动化运维

 2. 批量化的重复操作以及配合定时任务完成

 3. 有了脚本可以减轻管理员的工作量

 4. 人为干预少了,避免出错

 5. 提高批量文件的速度

3、 shell脚本的构成

echo : 将文本输出到标准输出,是一个用于显示简单文本的基本命令。

4、shell脚本的执行

非赋权执行:不给脚本执行权限的执行方式

  sh / bash :就是在当前的shell环境下生成一个子shell,在子shell的环境下运行,运行结果不改变父shell的环境,相当于演示

 source :等同于点命令:.  会改变当前的shell环境,也就是会真正的执行代码

赋权执行:脚本执行完毕后,生产环境都是赋权执行

一般需要先赋权:chmod 777 脚本文件名

./ :即执行当前目录下的脚本

/绝对路径 :即任意位置执行脚本

5、重定向操作

   标准输入:标准输入通常表示程序接受输入数据的来源,当程序需要从用户或另一个程序获取输入时,它会从标准输入读取数据,在大多数情况下,标准输入是通过键盘输入的。

    标准输出:标准输出是程序通常向其发送信息的位置,当程序产生输出时,它将输出写入到标准输出中,这些输出通常被显示在终端上。

    标准错误输出:标准错误输出用于程序报告错误和警告信息,与标准输出类似,标准错误输出也会显示终端上。

重定向输出:> ;>>;2>;2>>;``;&>;&>>

 >:标准输出的结果保存到指定的文件,而且会覆盖文件的内容
 >>:标准输出的结果保存到指定的文件,会在原有内容的尾部追加内容,不会覆盖原有的文件内容。
 2>:标准错误输出的内容保存到指定文件,且覆盖文件的内容。
 2>>:标准错误输出的内容保存到指定文件,尾部追加内容,不会覆盖。
 &>,&>>:混合输出,标准输出和标准错误输出都可以保存到指定文件,前者覆盖,后者尾部追加。

下图两行命令将用户test1的账户密码改成了123456

6、拍错的方法

bash  -n :检查语法错误

bash  -x :检查运行过程,打印运行的每一步骤

二、变量的含义

变量的作用:用来存放系统和用户需要使用的特定的参数(值),变量保存在内存中。调用变量时,直接到内存当中查找变量所在的内存地址。

2.1 变量的类型:
自定义变量:名称由用户自定义,值也可以自定义。

全局变量:对整个系统生效,所有用户都可以使用。

环境变量:环境变量是系统创建的,用来设置用户的工作环境。

位置变量:也叫做命令行参数,是在脚本的外面给脚本内部传值。

预定义变量:编程语言或者脚本解释器提供的,用户无法更改,只能由系统自行更新和设置。

2.2 自定义变量的规范
2.2.1 变量名的规范
不要使用系统的命令作为变量名
不要使用中文
不要使用特殊符号开头,可以用_开头
不要使用数字开头
变量名一般使用对应的英文名称
变量名要保持前后一致,要有注释,提高代码的可读性

2.2.2 变量值的规范

int :整数  ;      浮点: 小数 ;shell 能自动识别变量,不必声明类型,打印变量时,前面要加$符号

2.2.3 字符串的处理

1、单引号('):强引用

  • 在单引号中,特殊字符(除了单引号本身)和变量都不会被展开或解释。

  • 单引号中的内容会被视为纯粹的字符串,不会对其中的特殊字符或变量进行替换。


 

双引号("):弱引用

  • 在双引号中,变量和部分特殊字符(例如美元符号 $ 和反斜杠 \)会被展开或解释。

  • 双引号允许变量替换和部分特殊字符的转义,但不会影响单引号和反撇号的展开。

2.2.4 自定义变量值

 

2.2.5 全局变量

export 用于设置环境变量,Linux系统中,环境变量是一种全局变量,可以被所有子进程访问。通过 export 命令设置的环境变量会被传递给子进程,使得子进程也能够访问这些变量。

如果只在命令行里使用export,只对当前shell的所有子进程生效,而不会影响新开的shell。想要全局生效,需要在/etc/profile全局配置文件中写入,或者将该命令添加到Shell的配置文件(例如~/.bashrc或~/.bash_profile)中。这样,每次启动Shell时都会自动设置该变量。
 2.2.6 位置变量

位置变量:即命令行参数,是脚本外面给脚本内部传值,如下图所示:

2.2.7 预定义变量

$*$@:表示命令或者脚本需要处理的参数,区别在于处理方式不同。

$*$@不加双引号的表现一致,都是把参数一个一个处理。

$*加了双引号,会把参数当成一个整体来进行处理,$@加了引号还是一个一个处理。表现为一行或者多行显示。

可以看到所有位置参数(命令行参数)作为多个独立单词展开(即在不同行展开),每个参数都是独立的。

$#:也是一个全局变量,用来统计传递给脚本或者函数的参数个数。不管$*是否加双引号,对其统计的参数个数和$@是一样的。

$?:true/false,命令执行之后返回的状态码。

返回的状态码只有是0时,才表示成功,返回所有非0的结果,都表示失败。

$?只表示最近一次执行的状态。


 2.3 简单四则运算

整数四则运算包括:+ - * / 特别说明%:表示取余数

2.3.2 小数运算

bc :Linux系统自带的简易的计算机程序。可以计算整数运算,也可以计算小数运算。

2.3.3 自增和自减
i++:先赋值,再+1

++i:先+1,再赋值

i--:先赋值,再-1

--i:先-1,再赋值

前缀和后缀的区别:

echo $((i++)) 将先输出 i 的当前值,然后再将 i 的值加一。

echo $((++i)) 将先将 i 的值加一,然后再输出加一后的值。
 

 

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

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

相关文章

一文搞懂Linux多线程【下】

目录 🚩多线程代码的健壮性 🚩多线程控制 🚩线程返回值问题 🚩关于Linux线程库 🚩对Linux线程简单的封装 在观看本博客之前,建议大家先看一文搞懂Linux多线程【上】由于上一篇博客篇幅太长,为…

Java技术栈中的核心组件:Spring框架的魔力

Java作为一门成熟的编程语言,其生态系统拥有众多强大的组件和框架,其中Spring框架无疑是Java技术栈中最闪耀的明星之一。Spring框架为Java开发者提供了一套全面的编程和配置模型,极大地简化了企业级应用的开发流程。本文将探讨Spring框架的核…

打破数据分析壁垒:SPSS复习必备(八)

一、假设检验-基本概念 对总体提出一假设,然后借助样本对该假设进行检验。 原假设 H0: 在统计学中,把需要通过样本去推断正确与否的命题,称为原假设,又称零假设.它常常是根据已有资料或经过周密考虑后确定的. 备择假设H1: 与原假设对立的假设. 显著性水平(signi…

兰州市红古区市场监管管理局调研食家巷品牌,关注细节,推动进步

近日,兰州市红古区市场监管管理局临平凉西北绿源电子商务有限公司进行了深入视察,为企业发展带来了关怀与指导。 食家巷品牌作为平凉地区特色美食的代表之一,一直以来凭借其纯手工工艺和独特的风味,在市场上占据了一席之地。领导…

Linux常用环境变量PATH

Linux常用环境变量 一、常用的默认的shell环境变量二、环境变量 PATH三、持久化修改环境变量四、常用的环境变量 一、常用的默认的shell环境变量 1、当我们在shell命令行属于一个命令,shell解释器去解释这个命令的时候,需要先找到这个命令. 找到命令有两…

统信UOS上鼠标右键菜单中添加自定义内容

原文链接:统信UOS上鼠标右键菜单中添加自定义内容 Hello,大家好啊!今天给大家带来一篇关于在统信UOS桌面操作系统上鼠标右键菜单中添加自定义内容的文章。通过自定义鼠标右键菜单,可以大大提升日常操作的效率和便捷性。本文将详细…

面向对象修炼手册(四)(多态与空间分配)(Java宝典)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀面向对象修炼手册 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 1 多态 1.1 多态的形式&…

节省一个小目标,电手官方一键「傻瓜式」重装系统

大伙儿下午好,这是一篇负收益的广子。 没错,电手上线了重装 Windows 系统的工具类软件。 和我们顶头老大傲梅分区助手一样,不含捆绑,上手简单,完全免费,用爱发电。 众所周知,微软对于系统的更…

韩顺平0基础学java——第30天

p600-611 坦克大战! 艰难推进中 坦克大战-子弹 发射子弹 1.当发射一颗子弹后,就相当于启动一个线程 2.玩家拥有子弹对象,当按下J时,就启动发射行为(线程),让子弹不停移动,形成…

最新!计算机类SCI期刊全名单!你想发的顶刊都在这里

【SciencePub学术】近日,2023JCR正式发布,最受瞩目就是各类期刊的最新影响因子排名,本期,小编对计算机类的期刊做了一个整理,供计算机方向的研究学者们参考! 来源:WOS数据库官网 完整名单 ※ 本…

离线安装docker-v26.1.4,compose-v2.27.0

目录 ​编辑 1.我给大家准备好了提取即可 2.安装docker和compose 3.解压 4.切换目录 5.执行脚本 6.卸载docker和compose 7.执行命令 “如果您在解决类似问题时也遇到了困难,希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历,…

投屏软件免费版有没有?十款好用的手机投屏软件(2024更新)

“我想将手机免费投屏到电脑上,但是不知道怎么操作?有哪些图片软件免费版可以帮我解决这个问题吗?”在互联网时代,投屏软件的应用越来越广泛,使我们能够方便地将手机、平板等设备的内容投射到更大的屏幕上,…

Linux 网络:网卡 promiscuous 模式疑云

文章目录 1. 前言2. 问题场景3. 问题定位和分析4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 问题场景 调试 Marvell 88E6320 时,发现 eth0 出人意料的进入了 promis…

在Ubuntu上安装Python3

安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip验证查看版本 python3 --version

LabVIEW技术交流-控件的禁用属性与Mouse Up事件的一个坑

问题来源 我们平时对控件Mouse Up事件触发使用场景不多,可能在按钮控件上会偶尔用到。在一些场景中,我们用按钮的Mouse Up触发事件,但是又希望在某些限制条件下,按钮会被禁用而不能触发事件。 可是当我们禁用按钮时,它…

第三十一篇——大数据1:从四个特征把握大数据的本质

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 大数据的特征,如果我们没有一个清晰的边界以及明确的定位&…

grpc学习golang版( 四、多服务示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言 多服务,即一个rpc提供多个服务给外界调用…

大语言模型(LLM)LangChain介绍

LangChain是一个利用大语言模型的能力开发各种下游应用的开源框架,它的核心理念是为各种大语言模型应用实现通用的接口,简化大语言模型应用的开发难度,主要的模块示意图为: Index:提供了各类文档导入、文本拆分、文本向…

STM32中五个时钟源:HSI、HSE、LSI、LSE、PLL

时钟系统是处理器的核心,或者说时钟是单片机的心脏。 1.单片机内部需要储存器、累加器,这些都需要逻辑门电路。比如锁存器就是一个D触发器,而触发器的置1、清0、置数的功能都需要跳变沿。D触发器就是上升沿后存入数据,而这个上升…

SAP CO11N BAPI_PRODORDCONF_CREATE_TT连续报工异步更新导致COGI解决方案

背景: 之前上一个项目上有同事碰到一个问题,外围接口数据进入SAP,可能会对同一工单同一工序进行连续多次报工,并且工序控制码配置的是会自动货物移动的,所以正常来说,调用完BAPI完之后除了报工数量会更新之…