shell基础编程(一)

引言:之前的初识shell的内容简单的介绍了一下shell,帮助大家认识了一下shell 的组成,这篇文章就具体的讲解shell有关的知识。如果大家有编程基础的话。接下来几篇的文章读起来都会非常容易。没有的话也没有关系,我尽最大的可能讲的通俗易懂。那么现在就开始吧

首先说一下shell里面的各种变量类型的声明

创建一个变量:x=”xiaoli”
创建局部变量:local name=”xiaoli”,使用local修饰的变量在函数体外无法访问,只能在函数体中使用。
创建只读变量:readonly name=”xiaoli”,这种变量不可以被修改。
使用变量:echo $name或者echo ${name}
删除变量:unset name.

下面写一个实例,编辑test2.sh

x="2" echo $x 

上面的文件里面的echo是用于输出的,变量本身的值需要用到$

需要注意的是,变量名和等号之间不能有空格! 否则会被Shell解释成命令和命令行参数。 同时,变量名的命名须遵循如下规则:

首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。


说几个常用的功能

一、获取字符串的长度,用#符号获取,具体看代码

x="hello"echo ${#x}

二、获取子字符串

x="qwertyuiop"echo ${x:1:4}#前闭后开(]

上面的表示从第二个开始获取,一共四个字符

三、单引号和双引号

一句话总结,单引号内容为纯字符串,双引号里面可以取变量的值,举个例子

x="wode"
y="$x"shijie
z='$x'shijie
echo $y
echo $z

四、字符串的拼接

shell里面的字符串的拼接直接输出到一块就是拼接了,举个例子

x="wode"
y="shijie"
z=$x$y
echo $z

五、shell的运算符

hell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系(比较)运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

(一)下表列出了常用的算术运算符,具体的应用在举例列举出来,假设x和y都为1,(())只支持整数

运算符说明举例
+加法z=$(($x+$y)) echo $z
减法z=$(($x-$y)) echo $z
*乘法z=$(($x*$y)) echo $z
/除法z=$(($x/$y)) echo $z
%取余z=$(($x%$y)) echo $z
=赋值z=$x echo $z
==相等。用于比较两个数字,相同则返回 true。[ x==y ] 返回true
!=不相等。用于比较两个数字,不相同则返回 true。[ x!=y ] 返回false

(二)看看关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量x 为 1,变量 y 为 1:

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ x −eq y ] 返回 true。
-ne检测两个数是否相等,不相等返回 true。[ x −ne y ] 返回 false。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ x −gt y ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ x −lt y ] 返回 false。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ x −ge y ] 返回 true。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ x −le y ] 返回 true。

那么这里有个小的技巧,不用死记硬背,比如说-eq,eq是equal

-ne –>not equal

-gt –>greater than

-lt –>less than

-ge –>greater equal

-le –>less equal

把上面的对应成英文是不是就好理解了呢

(三)布尔运算符

下表列出了常用的布尔运算符

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ 1 -eq 2 -o 1 -eq 1 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ 1−lt 1 −a 1 −lt 1 ] 返回 false。

(四)逻辑运算符

运算符说明举例
&&逻辑的 AND[[ 1 -lt 1 && 1 -gt 0 ]] 返回 false
||逻辑的 OR[[ 2 -lt 3 || 1 -gt 2 ]] 返回 true

在逻辑运算符中,表达式需要用[[]],而布尔表达式是[]就可以了,不能用错。这些用到的地方就是在条件判断的时候了。而接下来的内容就要详细介绍条件判断模块

(五)字符串运算符

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ “a” = “b” ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。[ “a” != “b” ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z “a” ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n “a” ] 返回 true。
$检测字符串是否不为空,不为空返回 true。[ $”a” ] 返回 true。

六、简单的条件判断

这里简单说一下,为下面铺垫一下。其中格式为:


if [  表达式  ]
then
语句
fi

首先创建test3.sh文件

在里面写上内容

if [ 1 -eq 1 ]
then
echo "hello world"
fi

让我们执行一下

一些答疑

问:只读变量可以被删除吗

答:不可以,只读变量不会被删除

问:在做算数运算的时候必须是(())吗

答:不是的,这只是整数运算的一种,还可以用其他的比如let

let a=1+2
echo $a

如果是小数的话用bc,比如

echo 1+2 | bc

问:-a和&&与-o和||有什么区别呢

答:其实意思是一样的,但-a和&&区别是-a两边都执行,然后判断。&&是从左到右依次执行,成功往下执行,失败终止执行。-o和||的话也是-o两边同时执行,||的话左边不成功继续往下执行,成功就不往下执行了

以上就是关于shell脚本的本篇文章的内容了,接下来会持续更新~ ​

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

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

相关文章

RabbitMQ是如何保证高可用的?

RabbitMQ可以通过多种方式来实现高可用,以确保在硬件故障或其他不可预测的情况下,消息队列系统仍然能够正常运行。RabbitMQ有三种模式:单机模式、普通集群模式、镜像集群模式。 其中单机模式一般用于demo搭建,不适合在生产环境中…

高项-案例分析练习(范围管理)

案例一 公司在2014年初承接了一个医疗信息系统项目,要求2014年底完成该项目研发任务并进行试运行,2015年负责项目全年的运行维护,运行稳定后甲方验收合格项目才能结束。由于张工具有多年的医疗系统开发管理经验,公司领导任命他为项…

工作需求,Vue实现登录

加油&#xff0c;新时代打工人&#xff01; vue 2.x Element UI <template><div class"body" :style"{background-image: url(${require(/assets/images/login.png)})}"><el-form :rules"rules" ref"loginForm" :mode…

目标控制器数字孪生系统的研究与设计

文章来源&#xff1a;铁路计算机应用,2023,32(10):36-41. 作者&#xff1a;许婧&#xff0c;杨硕&#xff0c;季志均 摘要&#xff1a;随着目标控制器&#xff08;OC&#xff0c;Object Controller&#xff09;系统在轨道交通领域的推广应用&#xff0c;其硬件投入较高、研发…

VMware 15 中 Ubuntu与windows 10共享文件夹设置

wmware 15.5.7中安装ubuntu 22.04 物理机为windows 10 1.选中ubuntu中想要共享的文件夹右击&#xff0c;点属性 2.在Local network share中勾选share this folder&#xff0c;第一次会提示你安装samba&#xff0c;安装即可 3.window10的资源管理器中使用 虚拟机计算机名即可…

API调试管理工具Postman下载及操作介绍

1.下载安装postman地址&#xff1a;https://www.getpostman.com/downloads/ 2.创建项目 3.创建请求API 然后点击save保存api 4.用一个变量保存主域名&#xff0c;方便后续操作 就类似下面的baseurl 5.创建新环境 6.添加变量&#xff08;如添加本地测试环境url——ba…

什么是单点登录?

单点登录&#xff08;Single Sign On&#xff0c;简称 SSO&#xff09;简单来说就是用户只需在一处登录&#xff0c;不用在其他多系统环境下重复登录。用户的一次登录就能得到其他所有系统的信任。 为什么需要单点登录 单点登录在大型网站应用频繁&#xff0c;比如阿里旗下有淘…

Spring常用设计模式-实战篇之单例模式

实现案例&#xff0c;饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …

Git学习笔记之标签

Git 可以给仓库历史中的某一个提交打上标签&#xff0c;以示重要。 比较有代表性的 是人们会使用这个功能来标记发布结点&#xff08; v1.0 、 v2.0 等等&#xff09;。 1、列出标签 列出已有的标签: git tag按照通配符列出标签需要 -l 或 --list 选项。如果你只想要完整的标…

Codeforces Round #936 (Div. 2)D(拆位贪心)

思路&#xff1a;首先需要知道&#xff1a;如果某一位的数量为奇数,那么无论怎么分都会最终变成1. 整个问题转化成能有多少个隔断选取位置 先将所有数都拆位来看,首先观察那些比x的最高位还要高的位&#xff1a; 如果这些位的数量为奇数, 那么必然会使其位是1&#xff0c;不…

网络安全笔记-day6,NTFS安全权限

文章目录 NTFS安全权限常用文件系统文件安全权限打开文件安全属性修改文件安全权限1.取消父项继承权限2.添加用户访问权限3.修改用户权限4.验证文件权限5.总结权限 强制继承父项权限文件复制移动权限影响跨分区同分区 总结1.权限累加2.管理员最高权限2.管理员最高权限 NTFS安全…

使用npm创建一个全局的cli命令,就像vue-cli一样

我们用过vue-cli等工具包&#xff0c;全局安装之后&#xff0c;我们可以直接使用vue create等命令&#xff0c;实际上能够这样使用的原因&#xff0c;就是使用了package.json里面的bin字段注册命令。接下来就以一个脚本文件为例子为大家演示一下bin是如何发挥作用的。 创建项目…

vue.js+element-ui的基础表单

遇到原生的html小型单页应用时&#xff0c;是脱离了vue框架&#xff0c;而我们又想使用vue的语法和element的组件加快我们的开发速度&#xff0c;这个时候就需要引用他们的js了。技术栈即htmlvue.jselement-ui。而使用它们的方法也很简单&#xff0c;引入对应的js和css文件即可…

MySQL定时任务Event详解

文章目录 基本概念一、Event事件使用权限二、开启\关闭Event事件三、Event事件定义格式四、事件调度使用案例4.1 准备工作4.2 创建单次定时执行事件4.2.1 创建指定时间单次执行事件任务4.2.2 创建延迟时间单次执行事件任务4.2.3 创建单次执行事件任务[多SQ执行] 4.3 创建循环定…

数据仓库的数据处理架构Lambda和Kappa

1.数据仓库 数据仓库(Data Warehouse),简写DW。顾名思义,数据仓库是一个很大的数据存储集合,为企业分析性报告和决策支持而创建,是对多元业务数据的筛选与整合,具备一定的BI能力,主要用于企业的数据分析、数据挖掘、数据报表等方向,指导业务流程改进、监视时间、成本、…

从0到1实现RPC | 03 重载方法和参数类型转换

一、存在的问题 1.重载方法在当前的实现中还不支持&#xff0c;调用了会报错。 2.类型转换也还存在问题。 假设定义的接口如下&#xff0c;参数是float类型。 在Provider端接受到的是一个Double类型&#xff0c;这是因为web应用接收的请求后处理的类型。 在反射调用的时候就会…

前言:为什么C语言最适合编程入门?

前言&#xff1a;为什么C语言最适合编程入门&#xff1f; C语言被认为最适合编程入门的原因主要有以下几点&#xff1a; 基础且强大&#xff1a;C语言是一种基础且强大的编程语言。它提供了对底层硬件的直接访问&#xff0c;让初学者能够更好地理解计算机的工作原理&#xff0…

从零开始学Spring Boot系列-集成Kafka

Kafka简介 Apache Kafka是一个开源的分布式流处理平台&#xff0c;由LinkedIn公司开发和维护&#xff0c;后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统&#xff0c;可以处理消费者网站的所有动作流…

基于python+vue的O2O生鲜食品订购flask-django-nodejs-php

近年来互联网络的迅猛发展和电子终端设备的普及&#xff0c;赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术&#xff0c;时效性是它最大的特色&#xff0c;已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。…

了解云原生

1、云原生学习路线 学习云原生(Cloud Native)技术涉及了解和掌握一系列的概念、技术和工具。云原生是一种构建和运行应用程序的方法&#xff0c;旨在充分利用云计算的灵活性、可伸缩性和弹性。以下是一个可以参考的学习路线&#xff1a; 了解云原生基础 学习云计算的基本概念&…