Shell-(二)Shell变量与运算符

本文最后更新于:May 10, 2022 pm

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

目录

查看当前所处bash

1
ps -f

系统预定义变量

$HOME、$PWD、$SHELL、$USER等。

查看所有变量

1
2
3
set #包括系统的和用户自定义的,即全局和局部
#或者,但需要注意区别 ,
env #只有全局的变量

查看系统变量的值

1
echo $HOME

自定义变量

定义变量:变量名=变量值(注意:等号(=)两边不能有空格。如果变量值中有空格,则用单引号或双引号)可以用set查看所有的变量,但env就不能查看局部自定义变量。

撤销变量:unset 变量名

修改变量:再一次定义相同变量即可。

全局变量

将已有的变量设置为全局变量:export 变量名

1
export loong

这里需要注意的是:内部Bash定义的全局变量无法在外部的Bash中使用;但外部Bash定义的全局变量在内部Bash中是可以使用的。

子Bash使用父Bash的全局变量时,实际是Copy了一个全局变量。比如在子Bash中修改父Bash中定义的全局变量时,在子Bash中再次查看时是可以修改成功的,但在父Bash中查看时仍然是之前的值,并没有修改成功。即在子Bash中的修改对父Bash是没有效果的,只会在子Bash中才会有效。

只读变量

形式:readonly 变量名=变量值

1
readonly link=23

只读变量不可修改,不能unset。

特殊变量

$n

n为数字,$0表示该脚本名称,$1~$9 代表第一个到第九个参数,有10个以上的参数需要用大括号包含,如:${10}等。

示例:

脚本 parameter.sh

1
2
3
4
#!/bin/bash
echo '======$n======' # 这里需要注意,只能用单引号,如果是双引号的话则$n不会被识别为字符串
echo file name: $0
echo file par1: $1

执行:

1
2
3
4
5
6
./parameter.sh test1

# out
======$n======
file name: ./parameter.sh # 输出的是路径。执行时使用的相对或绝对路径。也可以只获取文件名称
file par1: test1

$#

获取输入参数的个数。

1
2
3
4
5
#!/bin/bash
echo '======$n======'
echo file name: $0
echo file par1: $1
echo file Parm: $#

执行:

1
2
3
4
5
6
7
./parameter.sh test1 test2

# out
======$n======
file name: ./parameter.sh
file par1: test1
file Parm: 2

其他特殊变量

  • $*:代表命令行中所有的参数,把所有的参数都看成一个整体。
  • $@:代表命令行中所有的参数,把每个参数区分对待。
1
2
3
4
5
6
7
#!/bin/bash
echo '======$n======'
echo file name: $0
echo file par1: $1
echo file Parm: $#
echo file Parms : $*
echo file parms2 : $@

执行:

1
2
3
4
5
6
7
8
9
./parameter.sh test1 test2 test3

# out
======$n======
file name: ./parameter.sh
file par1: test1
file Parm: 3
file Parms : test1 test2 test3
file parms2 : test1 test2 test3

$?

最后一次执行的命令的返回状态。如果这个变量输出结果为0,则表示上一个命令正确执行;如果为非0,则表示上一个命令执行不正确。

也可以理解成用来判断上一个命令的执行是否出错,0表示没有出错;非0表示出错了。

1
echo $?

运算符

基本语法:$((运算式))、$[运算式]

示例:

1
2
3
4
5
6
7
8
9
#!/bin/bash
echo '======$n======'
echo file name: $0
echo file par1: $1
echo file Parm: $#
echo file Parms : $*
echo file parms2 : $@
echo comp $((3+3))
echo comp2 $[2*4]

示例:

1
2
3
4
5
6
7
8
9
10
11
./parameter.sh test1 test2 test3

# out
======$n======
file name: ./parameter.sh
file par1: test1
file Parm: 3
file Parms : test1 test2 test3
file parms2 : test1 test2 test3
comp 6
comp2 8

本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/ac66a49c.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!