Linux:shell的基础用法

shell的基础用法

  • shell变量

    • Shell 支持以下三种定义变量的方式:

      • value=abc
      • value=‘abc’
      • value=“abc”
      • (注意,赋值号=的周围不能有空格)
    • Shell 变量的命名规范

      • 变量名由数字、字母、下划线组成
      • 必须以字母或者下划线开头
      • 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)
    • 使用变量

      • 使用一个定义过的变量,只要在变量名前面加美元符号$即可

        train="huoche"
        c="huoche"
        echo $c
        echo ${train}
        
      • 变量名外面的花括号{ }是可选的

    • 修改变量的值

      c="huoche"
      echo $c
      c="qiche"
      echo $c
      
    • 单引号和双引号的区别

      • 以单引号’ '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景

      • 以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。

        a1="abc"
        a2="aaa:${a1}"
        a3='aaa:${a1}'
        echo $a2
        echo $a3
        
    • 将命令的结果赋值给变量

      • 把命令用反引号`包围起来

      • 把命令用$()包围起来

        a1=`shell`
        a2=$(shell)
        
    • 只读变量

      • 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

        a="asdfghhj"
        readonly a
        echo $a
        
    • 删除变量

      • 使用 unset 命令可以删除变量

      • unset 命令不能删除只读变量(没有任何输出)

        a="asdfghhj"
        readonly a
        b="123456"
        echo $a
        echo $b
        unset b
        echo $b
        
  • Shell传递参数

    • 向脚本传递参数,脚本内获取参数的格式为:$n。$0 为执行的文件名。

      echo "$0"
      echo "$1"
      echo "$2"
      echo "$3"
      echo "$4"
      echo "$5"
      echo "$6"#终端传参
      sh demo.sh 1 2 3 4 5 6
      
    • 特殊字符处理参数说明

      • 请添加图片描述
      echo $#
      echo $*
      echo $@#终端传参
      sh demo.sh 1 2 3 4 5 6
      
      • $* 与 $@ 区别:
        • 相同点:都是引用所有参数。
        • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
  • Shell字符串

    • 三种形式的区别

      • 由单引号’ '包围的字符串:

        • 任何字符都会原样输出,在其中使用变量是无效的。
        • 字符串中不能出现单引号,即使对单引号进行转义也不行。
      • 由双引号" "包围的字符串:

        • 如果其中包含了某个变量,那么该变量会被解析,而不是原样输出。
        • 字符串中可以出现双引号,只要它被转义了就行。
      • 不被引号包围的字符串

        • 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。

        • 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

          n=14
          s1=www.baidu.com$n
          s2="www\".baidu\".com $n"
          s3='www.baidu $n'
          echo $s1
          echo $s2
          echo $s3
          
    • 获取字符串长度

      • 获取字符串长度:${#字符串名称}

        s3='www.baidu $n'
        echo ${#s3}
        
    • 字符串拼接(连接、合并)

      • 不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

        a1=www.
        a2=baidu
        echo $a1$a2
        echo "$a1 $a2"
        echo $a1":"$a2
        echo "$a1:$a2"
        echo "${a1}Script:${a2}index.html"
        
    • 字符串截取

      • 从指定位置开始截取

        • 这种方式需要两个参数:指定起始位置,截取长度,才能确定要截取的字符串。

        • 从字符串左边开始计数

        url="https:www.guge.com"
        echo ${url:2:9}
        echo ${url:2}
        
        • 从字符串右边开始计数。格式:${字符串:0-start : length}

          url="https:www.guge.com"
          echo ${url:0-10:9}
          echo ${url:0-13}
          
      • 从指定字符(子字符串)开始截取

        • 使用 # 号截取右边字符

          url="https:www.guge.com"
          echo ${url#*u}
          echo ${url#*uge}
          echo ${url#*:}
          echo ${url#http}
          #以上写法遇到第一个匹配的字符(子字符串)就结束了
          echo ${url##*.}
          echo ${url#*guge.}
          希望直到最后一个指定字符(子字符串)再匹配结束
          
        • 使用 % 截取左边字符

          url="https:www.guge.com"
          echo ${url%.*}#遇到最后一个匹配的字符(子字符串)就结束了
          echo ${url%%.*}#遇到第一个匹配的字符(子字符串)就结束
          
      • 请添加图片描述

  • Shell数组

    • 创建一个简单的数组 my_array

      my_array=(a b 'c' d)
      
    • 读取数组

      my_array=(a b 'c' d)
      echo "第一个元素:${my_array[0]}"
      echo "第二个元素:${my_array[1]}"
      echo "第三个元素:${my_array[2]}"
      echo "第四个元素:${my_array[3]}"
      
    • 关联数组

      declare -A site
      site["guge"]="www.guge.com"
      site["baidu"]="www.baidu.com"
      echo ${site["guge"]}
      
    • 获取数组中的所有元素

      my_array[0]=a
      my_array[1]=b
      my_array[2]=c
      my_array[3]=d
      echo ${my_array[@]}
      echo ${my_array[*]}
      
    • 获取数组的长度

      my_array[0]=a
      my_array[1]=b
      my_array[2]=c
      my_array[3]=d
      echo ${#my_array[@]}
      echo ${#my_array[*]}
      
  • Shell运算符

    • 算术运算符

请添加图片描述

  ```m=10n=20echo `expr $m + $n`#使用命令必须有空格echo `expr $m - $n`echo `expr $m \* $n`echo `expr $m / $n`echo `expr $m % $n`echo `expr $m = $n`echo `expr $m == $n`echo `expr $m != $n`echo $(($m+$n))echo $(($m-$n))echo $(($m*$n))echo $(($m/$n))echo $(($m%$n))echo $(($m==$n))echo $(($m!=$n))```
  • 关系运算符

请添加图片描述

  ```m=10n=20if [ $m -eq $n ];thenecho "m等于n"elseecho "m不等于n"fiif [ $m -ne $n ];thenecho "m不等于n"elseecho "m等于n"fiif [ $m -gt $n ];thenecho "m大于n"elseecho "m不大于n"fiif [ $m -lt $n ];thenecho "m小于n"elseecho "m不小于n"fiif [ $m -ge $n ];thenecho "m大于等于n"elseecho "m不大于等于n"fiif [ $m -le $n ];thenecho "m小于等于n"elseecho "m不小于等于n"fi```
  • 布尔运算符

    请添加图片描述

    m=10
    n=20
    if [ $m != $n ];
    thenecho "m不等于n"
    elseecho "m等于n"
    fiif [ $m -lt 20 -o $n -gt 100 ];
    then echo "m小于20或n大于100"
    elseecho "no"
    fiif [ $m -lt 20 -o $n -gt 100 ];
    then echo "m小于20且n大于100"
    elseecho "no"
    fi
    
  • 逻辑运算符

请添加图片描述

  ```m=10n=20if [[ $m -lt 100 && $n -lt 100 ]];then echo "true"elseecho "false"fiif [[ $m -lt 100 || $n -lt 100 ]];then echo "true"elseecho "false"fi```
  • 字符串运算符

请添加图片描述

  ```n=10if [ -z $n ];then echo "true"elseecho "false"fiif [ -n "$n" ];then echo "true"elseecho "false"fiif [ $n ];then echo "true"elseecho "false"fi```
  • 文件测试运算符

    if [ $n ];
    then echo "true"
    elseecho "false"
    fiif [ -d $n ];
    then echo "true"
    elseecho "false"
    fiif [ -f $n ];
    then echo "true"
    elseecho "false"
    fi
    if [ -e $n ];
    then echo "true"
    elseecho "false"
    fi
    

请添加图片描述

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

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

相关文章

IDEA的pom.xml显示ignored 的解决办法

问题: idea中创建Maven module时,pom.xml出现ignored。 原因: 相同名称的module在之前被创建删除过,IDEA会误以为新的同名文件是之前删除掉的,将这个新的module的pom.xml文件忽略掉显示ignored. 解决: 在…

springboot超市商品管理系统-计算机毕业设计源码55289

摘 要 随着信息技术的快速发展和普及,传统的超市管理模式已经无法满足现代商业的需求。为了提高超市的管理效率,优化商品销售流程,本文提出了一种基于SpringBoot框架的超市商品管理系统。该系统结合了现代软件开发技术,包括MySQL数…

WATLOW Power Series SSR User’s Manual

WATLOW Power Series SSR User’s Manual

【Java】字符串String类(011)

目录 ♦️API和API帮助文档 ♦️创建String 🎏直接赋值类 🎏new类 🐡空参类 构造方法: 举例代码: 🐡有参类 构造方法: 举例代码: 🐡字符数组类 构造方法&…

【C++】类和对象——流插入和流提取运算符重载

目录 前言ostream和istream自定义类型的流插入重载自定义类型的流提取重载解决私有问题日期类总接口 前言 我们在上一节实现日期类时,在输入和输出打印时,经常会调用两个函数: void Insert()//输入函数{cin >> _year;cin >> _mo…

项目比赛经验分享:如何抓住“黄金一分钟”

项目比赛经验分享:如何抓住“黄金一分钟” 前言引起注意:用事实和故事开场明确痛点:描述问题和影响介绍解决方案:简明扼要激发兴趣:使用视觉辅助概述演讲结构:清晰的路线图我的开场白示例结语 前言 在创新的…

(源码分析)springsecurity认证授权

了解 1. 结构总览 SpringSecurity所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。 根据前边知识的学习,可以通过Filter或AoP等技术来实现,Spr…

鸿蒙应用框架开发【简单时钟】 UI框架

简单时钟 介绍 本示例通过使用ohos.display接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 使用说明 1.界面通过setInterval实现周期性实时刷新时间,使用Canvas绘制时钟,指针旋转角度通过计算得出。 例如:"2 * Math.PI / …

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞,这些漏洞可能被恶意攻击者利用,从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

BUGKU-WEB-好像需要密码

如果点击start attrack 后出现 Payload set 1: Invalid number settings 的提示,先点hex 后点 decimal 再开始start attrack,这是一个软件bug,需要手动让它刷新。 解题思路 先随便输入测试:admin看看源码吧那就爆破了 据说&…

WEBKIT 通过JavaScript 调用本地,硬件未来之窗OS硬件APP

以酒店为例我们需要调用shen份证读取,采集人脸,门锁写房卡,如何通过浏览器调用 1.通过本地http服务 2.通过webkit模式 这里说政务单位模式的集成 由于篇幅问题,怎么集成webkit就不说了 一、webkkit加载交互本地代码 browser.…

旅游卡,免费,旅游是真的吗?真相是……

但这种包来回大交通,一旦成本大于利润,他们就会以各种理由推卸责任。这就是我在“揭秘:共享旅游卡免费旅游,包来回路费,这背后的3大真相!”这篇文章里面讲到那个大妈的惨痛教训。 以上这5点真相&#xff0…

大数据学习之Flink基础(补充)

Flink基础 1、系统时间与事件时间 系统时间(处理时间) 在Sparksreaming的任务计算时,使用的是系统时间。 假设所用窗口为滚动窗口,大小为5分钟。那么每五分钟,都会对接收的数据进行提交任务. 但是,这里有…

Redis高可用之持久化,以及reids的性能管理

一、redis高可用: 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性 在redis中实现高可…

平移、旋转、缩放和媒体

一、平移 1.1translate()函数 做转换工作可以用translate()函数,这个函数可以改变坐标系。通过改变默认的坐标系,我们可以创建不同的转换方式,包括平移、旋转和缩放。 1.2平移位置案例 案例代码如图1 图1 保存运行如…

Flutter——全网最精致木鱼APP可上架应用市场

研发背景 工作之余,闲来无事,想着研发一款用户可能会经常用到的一款APP,并且能够顺便掌握一下Flutter Material Design 3 UI,所以就有了这款比较精致的木鱼APP的诞生。 开源代码 https://github.com/z244370114/woodenfish

期刊评价指标及其查询方法

1、期刊评价体系一 科睿唯安《期刊引证报告》(Journal Citation Reports, JCR) 科睿唯安每年发布的《期刊引证报告》(Journal Citation Reports, JCR)是一个独特的多学科期刊评价工具。JCR数据库提供基于引文数据的统计信息的期…

Linux下文件编译器-GCC/G++

前言 本文介绍了c/c的编译过程以及gcc/g的时使用 一.c/c翻译的本质:将高级语言翻译成二进制 1)程序翻译过程: (1)预处理(头文件展开、宏替换、去注释、条件编译)还是C语言代码 ​ …

项目:基于gRPC进行项目的微服务架构改造

文章目录 写在前面基本使用封装客户端封装服务端Zookeeper 写在前面 最近学了一下gRPC进行远程调用的原理,所以把这个项目改造成了微服务分布式的架构,今天也是基本实现好了,代码已提交 这里补充一下文档吧,也算记录一下整个过程…

Ruoyi 快速开发平台

Ruoyi 快速开发平台 一、官网二、准备工作2.1 环境要求2.2 必要配置 三、运行系统3.1 后端运行3.2 前端安装及运行 四、自定义开发4.1 新增业务模块4.2 代码生成4.2.1 创建菜单4.2.2 后端代码4.2.3 前端代码 一、官网 链接: 前后端分离版本 回到目录 二、准备工作 2.1 环境要…