• Linux之Shell进阶(变量和条件判定语句)


    变量

    变量的含义

    什么是量?

    • 量就是数据.

    什么是变量?

    • 数据可以发生改变就是变量。

    在一个脚本周期内,其值可以发生改变的量就是变量。
    什么叫做一个脚本周期?

    • 一个脚本周期我们可以简单的理解为当前的shell文件。

    变量是shell中不可或缺的一部分,也是最基础、最重要的组成部分。

    变量的定义与使用(重点)

    变量,先定义后使用。

    定义形如:hello=“hello 666”
    使用形如:echo $hello

    变量就是由2部分组成,一个是变量名(左边),另外一部分是变量的值(右边),类似于Java中变量的定义,只不过Java中的变量还有个变量类型。

    变量名和变量值是什么关系??
    变量名和变量值是使用和被使用关系; 我们的变量名来使用变量值;
    在使用变量的时候一定需要在变量名前面添加一个$符号,该要求在其他语言中也存在的(例如php)。

    变量名的规范
    注意,变量名后面的等号左右不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线“_”。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    问题:以下哪个shell变量名是合法的?
    A. var B.?var C. user*name D.echo

    案例1:使用变量改写入门脚本中的第1个shell脚本

    #!/bin/bash
    hello="hello world 666"
    echo $hello
    
    • 1
    • 2
    • 3
    [root@localhost aaa]# ./test.sh
    hello world 666
    
    • 1
    • 2

    关于单双引号的问题:

    • 双引号能够识别变量,双引号能够实现转义(类似于“*”)
    • 单引号是不能识别变量,只会原样输出,单引号是不能转义的

    案例2:定义一个变量,输出当前时间,要求格式为“年-月-日 时:分:秒”。

    #!/bin/bash
    datetime=`date +'%F %T'`
    echo $datetime
    
    • 1
    • 2
    • 3

    注意:反引号(esc键下方的那个键),当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”。

    只读变量

    语法:readonly 变量名
    案例:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值

    #!/bin/bash
    a=10
    readonly a
    a=20
    echo $a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [root@localhost aaa]# ./test2.sh
    ./test2.sh: line 4: a: readonly variable
    10
    
    • 1
    • 2
    • 3

    接收用户输入

    语法:**read -p 提示信息 变量名**
    案例:编写一个脚本test6.sh,要求执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件

    #!/bin/bash
    read -p '请输入需要创建的文件路径'  filepath
    touch $filepath
    echo '文件创建成功,路径为:'$filepath
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    删除变量

    语法:unset 变量名
    案例:定义变量b=20,再输出b的值,随后删除b,最后再输出下b

    #!/bin/bash
    b=10
    echo $b
    unset b
    echo $b
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    条件判断语句

    老婆给当程序员的老公打电话:下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。当晚,程序员老公手捧一个包子进了家门…老婆怒道:你怎么就买了一个包子?!老公答曰:因为看到了卖西瓜的。
    把程序员老婆的话当作一段需求分析一下吧。买一斤包子是一个确定无疑的需求项,无论后面是什么情况什么条件,前面这一斤包子是肯定要买的。看到卖西瓜的是一个条件判断,后面“买一个”是一个模糊不清的需求项,买一个什么呢?需求里没说啊。客户把这个当作开发人员默认了解的内容了。可是作为一个成熟合格的程序员,该老婆的丈夫应该马上跟进确认需求“买一个什么?”,要不然程序可怎么写呢?所以笑话里该程序员是不合格的,起码是不积极不负责的。在没有明确需求的情况下,他只能按照自己的理解来完成工作了。那比较可能的结果就有如下几种:

    1. 看到卖西瓜的,买一个西瓜
      如果看到卖西瓜的
      那么
      买一个西瓜
      否则
      买一斤包子
    2. 看到卖西瓜的,买一个包子
      如果看到卖西瓜的
      那么
      买一个包子
    3. 看到卖西瓜的,买一个卖西瓜的
    4. 看到卖西瓜的,买一个老婆一直想买的东西
    5. 看到卖西瓜的,随便买一个东西

    上述1和2下面的条件汉字描述称之为“伪代码”,也是属于条件表达式的语法。

    语法1(一个条件):
    if condition
    then
    command1
    command2

    fi

    单行写法(一般在命令行中执行的时候):if [ condition ]; then command; fi

    语法2(两个条件):
    if condition
    then
    command1
    command2

    else
    command
    fi

    语法3(多个条件):
    if condition1
    then
    command1
    elif condition2
    **then **
    command2
    else
    commandN
    fi

    相关文章:Linux之Shell基础入门

    本文内容到此结束了,
    如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
    如有错误❌疑问💬欢迎各位指出。
    主页共饮一杯无的博客汇总👨‍💻

    保持热爱,奔赴下一场山海。🏃🏃🏃

  • 相关阅读:
    PMP每日一练 | 考试不迷路-11.22(包含敏捷+多选)
    牛客刷题<二>异步复位的串联T触发器
    【无标题】
    【★★★★★ 第8章 排序 2022 9.10】
    Aspose.Slides 21.11.0 For .NET Crack
    从静态到动态化,Python数据可视化中的Matplotlib和Seaborn
    Jetson-inference -Coding Your Own Image Recognition Program (Python)学习笔记
    Appium入门自动化测试(6)—— Appium 常用方法的自己动手封装
    热销产品缺货,滞销产品积压?WMS系统如何打造智能仓储
    纯前端读写文件?
  • 原文地址:https://blog.csdn.net/qq_35427589/article/details/131679218