Shell教程02-变量-运算符-条件判断

简介

这篇来介绍 shell 中变量

变量

Shell 可以设置变量,

如系统默认的变量

  • SHELL:当前用户的解释器
  • USER:当前用户
  • HOME:当前用户的家目录

查看这些变量的值只需要 echo $变量名即可

例如:

1
2
3
4
5
echo $SHELL

echo $USER

echo $HOME

输出结果:

1
2
3
4
5
/bin/bash

ecs-user

/home/ecs-user

系统变量

系统变量,顾名思义,就是系统自带的变量

除了已经介绍过的SHELL、USER、HOME等外,还有如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
PATH:环境变量,包含了可执行文件的搜索路径。
BASH_VERSION:Bash shell的版本信息。
PWD:当前工作目录的绝对路径。
LANG:系统的语言和字符集设置。
TERM:终端类型。
LOGNAME:当前登录的用户名。
HISTSIZE:命令历史记录的数量。
LINES:终端的行数。
USER:非root用户的用户名。
UID:用户ID(root用户为0)。
GID:组ID(root用户为0)。

使用env命令查看当前系统定义的所有环境变量

使用set命令显示所有本地定义的 Shell 变量

自定义变量

除了系统自带的系统变量以外,用户还可以自定义属于自己的变量

基本语法:

  • 定义变量:变量名=变量值,等号两边不能有空格
  • 撤销变量:unset 变量名
  • 静态变量:readonly 变量名,静态变量不可撤销
  • 全局变量:export 变量名

变量命名规则

  • 必须以字母(a-z、A-Z)或下划线(_)开头
  • 区分大小写,环境变量命名建议大写
  • 不能是内置命令或关键字
  • 长度不能超过 99 个字符
  • 不能包含空格或其他特殊字符

变量小贴士

  • 变量默认类型都是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格,需要使用双引号或单引号括起来

特殊变量

除了系统变量,自定义变量,还有一些特殊的变量,它们经常在 shell 脚本中使用

$n

n 代表是数字,如 0、1、2、3,…,在大于 9 后,需要用 {} 包裹,如 ${10}

$0 表示的是当前脚本的名称或路径

如:

example.sh

1
2
#!/bin/bash
echo "this script name is $0"

执行脚本

1
sh example.sh

输出内容

1
this script name is example.sh

脚本 2

1
2
#!/bin/bash
echo "this script name is $0, parms is: $1 $2 $3 $4"

执行脚本

1
sh example2.sh i love shell

输出结果

1
this script name is example2.sh, parms is: i love shell

这里第 4 个参数,没有赋予,结果也没有显示

$#

$#:获取所有输入参数的个数

1
2
#!/bin/bash
echo "params count: $#"

运行

1
sh example3.sh this is a examle

运行结果

1
params count: 4

$*$@

  • $*:代表命令行中所有的参数,把所有的参数看成一个整体
  • $@:代表命令行中所有的参数,把每个参数区分对待

例:

example4.sh

1
2
3
4
5
#!/bin/bash
echo '----- $@ -----'
echo $@
echo '----- $* -----'
echo $*

运行

1
sh example4.sh i love shell

运行结果

1
2
3
4
----- $@ -----
i love shell
----- $* -----
i love shell

$?

$?:返回上一次执行结果的状态,如果为 0,表示正确执行,如果非 0,表示不正确执行

例如:

example5.sh

1
2
3
4
5
#!/bin/bash
echo '----- $? -----'
echo $?
num = 10
echo $?

运行

1
sh example5.sh

运行结果

1
2
3
4
----- $? -----
0
example5.sh: 4: num: not found
127

结果解释

  • 0:表示前一个命令 echo '----- $? -----' 运行成功了
  • 127:因为num = 10 变量赋值之间有空格,失败了,所以后面的 echo $?输出了一个非 0 数字
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->