Linux学习之shell脚本——变量

雨点打透心脏的1/2处 2022-06-17 01:41 448阅读 0赞

echo:显示内容

在学习变量之前先了解一个命令echo,该命令类似于c中的print,在控制台打印消息。

输入echo Hello World命令,结果如下

  1. [root@iZ2zebizp6le568407aeayZ shell]# echo Hello World
  2. Hello World

在这里,echo实际上接收了两个参数HelloWorld并显示。

输入echo 'Hello world'命令,

  1. [root@iZ2zebizp6le568407aeayZ shell]# echo 'Hello World'
  2. Hello World

打印虽然一样,但此时echo只接收了一个参数。

可以分别在两条命令的HelloWorld中间添加多个空格,以此验证。

定义变量

输入命令vim variable.sh然后编写脚本内容如下

  1. #!/bin/bash
  2. # 定义变量
  3. message='Hello world'
  4. # 打印变量
  5. echo $message

在定义变量时,我们不需要添加$符号,但要使用此变量,一定要添加$符号。

然后保存该脚本文件并添加执行权限。关于创建、保存和添加权限的细节,如果不了解的请看我上一篇博客

运行脚本./variable.sh,结果如下:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable.sh
  2. Hello world

注意:在编写的过程中,一些有着格式化习惯的人会在=两边添加空格,如下message = 'xxx',但在实际运行过程中会将message当做命令去执行,报如下错误

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable.sh
  2. ./variable.sh: line 4: message: command not found

引号的使用

在上面的程序中,编写时使用了'单引号,修改脚本程序如下:

  1. #!/bin/bash
  2. # 定义变量
  3. message='Hello world'
  4. # 打印变量
  5. echo 'message is $message'

修改了echo打印的内容,变量的引用放到了'单引号中,此时运行脚本,结果如下

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable.sh
  2. message is $message

What?变量为什么没有被替换呢?

因为在shell中,单引号忽略它括起来的所有特殊符号,也就是说此时的$仅仅表示一个字符,没有什么特殊的含义。

遇到这种情况怎么办呢,可以使用双引号替换单引号,因为双引号虽然也忽略大部分的特殊字符,但不包括美元符号$、反引号和反斜杠\。不忽略美元符号意味着变量可以被识别。那么修改代码如下

  1. #!/bin/bash
  2. # 定义变量
  3. message='Hello world'
  4. # 打印变量
  5. echo "message is $message"

运行结果如下:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable.sh
  2. message is Hello world

除了双引号和单引号,还有反引号,如何使用呢,我们继续修改代码

  1. #!/bin/bash
  2. # 定义变量
  3. message='Hello world'
  4. # 打印变量
  5. echo "message is $message"
  6. # 获取目录,反引号括起
  7. dir=`pwd`
  8. # 打印
  9. echo dir:$dir

又定义了一个变量并赋值,其中值用反引号括住,最后打印一下。运行结果如下

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable.sh
  2. message is Hello world
  3. dir:/home/shell

可以看到使用反括号括起来的值被当做命令去执行,并将执行的值赋给变量。

read 请求输入

既然是程序,肯定就会有输入的情况,那么如何获取用户输入呢?

运行vim read_variable.sh并添加内容

  1. #!/bin/bash
  2. read name
  3. echo "Hello $name"

添加权限后运行./read_variable.sh命令,结果如下

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./read_variable.sh
  2. 111
  3. Hello 111

当程序运行之后,会等待,直到我们输入并敲击回车之后,才往下执行。

如果传入多个参数呢,修改脚本如下:

  1. #!/bin/bash
  2. read name password
  3. echo "Hello $name --- $password"

运行脚本结果如下:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./read_variable.sh
  2. 1321 dadas das312
  3. Hello 1321 --- dadas das312

对于一条read命令,获取的参数以空格分割,上面的输入中输入了三个参数,那么多余的参数会累加到最后一个参数上

read命令同时提供了一些常用的参数:

  • -p:显示提示信息。
  • -n:限制字符的数目。如果输入的参数的字符数目已经达到限制的字符数,则会自动往下执行。
  • -t:限制输入的时间,单位s。当达到时间之后,会自动执行命令。
  • -s:隐藏输入,类似于常见的Linux输入密码的样式。

举个例子:

编写如下代码:

  1. #!/bin/bash
  2. read -p '请输入姓名(最大字符5):' -n 5 -t 5 name
  3. echo "Hello !"

read命令分别添加了提示输出的信息,字符的限制,以及限制输入时间。

执行的如下:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./read_variable.sh
  2. 请输入姓名(最大字符5):dsHello !

输入了ds之后,并没有键入回车,程序等待5s之后继续执行,不过没有换行,我们可以在echo中加入\n

到了这里,会发现我们输入的参数必须要根据提示一个个的输入,那么我们能不能在使用脚本的时候,直接在后面拼接上参数呢,当然是可以的。

看如下代码:

  1. #!/bin/bash
  2. echo "参数的数目:$#"
  3. echo "运行脚本的名称:$0"
  4. echo "第一个参数:$1"
  5. echo "第二个参数:$2"

代码中结束的很清楚,如果想要获取第3,4,5…,依次往下累加即可。

运行一下代码:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable_porams.sh one two three
  2. 参数的数目:3
  3. 运行脚本的名称:./variable_porams.sh
  4. 第一个参数:one
  5. 第二个参数:two

数组

shell中的数组的使用基本上和一些脚本语言使用上类似。

首先看代码:

  1. #!/bin/bash
  2. array=('0' '1' '2')
  3. array[5]='5'
  4. echo ${array[1]}
  5. # 打印所有数组
  6. echo ${array[*]}

数组的声明用()括起来。数组可以包含任意大小的元素数目,而且数组的元素编号不需要是连续的,可以略过一些格子。

注意:shell中数组的下标也是从0开始

运行一下脚本:

  1. [root@iZ2zebizp6le568407aeayZ shell]# ./variable_array.sh
  2. 1
  3. 0 1 2 5

发表评论

表情:
评论列表 (有 0 条评论,448人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shell 脚本编程变量

    简介 Shell 是指一种命令行解释器,为用户和操作系统之间进行通信提供一种接口,它接受来自用户的命令,并将其转换成一系列的系统调用送到内核执行,并将结果输出给用户。Sh

    相关 shell脚本变量

    变量定义及变量的划分 > 变量:即用一个特定的字符串去表示不固定的内容 1、自定义变量 自定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写

    相关 Linux Shell变量

    下面接着翻译 在bash下,变量都默认为string类型,武林我们是否用双引号引起来。 一、准备工作 变量有通用的命名规则,当一个执行在执行的时候,它需要通过调用环