Linux学习笔记-Shell变量

在Bash中,变量的默认类型都是字符串类型的,Shell编程中,使用变量无需事先声。

变量的命名规范

变量名的命名须遵循如下规则:

  • 首个字符必须为字母(a-z,A-Z)
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

变量的分类

  • 用户自定义变量:用户可以自己定义。
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。变量可以自动一,但是对系统生效的环境变量名和变量作用是固定的。
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或者数据的,变量名不能自定义,变量作用是固定的。
  • 位置参数变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

定义变量

1
变量名=变量值  (等号 =两边不能带空格)

变量调用

1
echo $变量名
1
2
3
如下示例:
echo $x
echo $name

变量叠加

1
2
3
x=123
x="$x"456
x=${x}789

最终使用echo $x将输出123456789

变量查看

1
2
3
set
选项:
-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)

变量的删除

1
unset 变量名  (注意,此处不能加$符号)

环境变量

环境变量和用户自定义变量的区别:

  • 用户自定义变量只在当前的shell中生效,环境变量在当前shell和这个shell的所有子shell中生效。
  • 环境变量是全局变量,用户自定义变量是局部变量。
  • 对系统生效的环境变量名和变量作用是固定的。

设置环境变量

1
2
3
4
export 变量名=变量值

变量名=变量值
export 变量名

查看环境变量

1
2
set #查看所有变量
env #查看环境变量

常用环境变量

1
2
3
4
5
6
7
HOSTNAME:主机名
SHELL:当前的shell
TREM:终端环境
HISTSIZE:历史命令条数
SSH_CLIENT:当前操作环境是用ssh链接的,这里记录客户端的ip
SSH_TTY:ssh连接的终端是pts/1
USER:当前登录的用户

PATH变量

PATH变量:系统查找命令的路径。

1
2
echo $PATH    #查看PATH变量的值
PATH="$PATH":/root/sh #增加PATH变量的值

PS1变量

PS1变量:命令提示符设置

1
2
3
4
5
6
7
8
- \d 显示日期,格式为”星期 月 日“
- \H 显示完整的主机名"localhost.localdomain"
- \t 显示24小时制时间,格式为"HH:MM:SS"
- \A 显示24小时制时间,格式为"HH:MM"
- \u 显示当前用户名
- \w 显示当前所在目录的完整名称
- \W 显示当前所在目录的最后一个目录
- \$ 提示符、如果是root用户会显示提示符为"#",如果是普通用户会显示提示符为"$"

当前语系查询

1
2
3
4
5
6
7
8
9
# locale    #查询当前语系
-LANG 定义系统主要语系(当前生效语系)
-LC:ALL 定义整体语系的变量(下次启动可能会生效)

echo $LANG #查看系统当前语系

locale -a | more #查看linux支持的所有语系

cat /et/sysconfig/i18n #查询系统的默认语系(开机生效读取的语系环境)

Linux中文支持

前提条件:正确安装中文字体和中文语系。

  • 如果有图形界面,可以正确支持中文显示。
  • 如果使用第三方远程工具,只要语系设定正确,可以支持中文显示。
  • 如果使用纯字符界面,必须使用第三方插件(zhcon等)

位置参数变量

1
2
3
4
$n    n为数字,$0代表命令本身,$1~$9代表第一到第九个参数,十以上的参数需要用到大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看作是一个整体。
[email protected] 这个变量也代表命令行中所有的参数,不过[email protected]把每个参数区分呢对待。
$# 这个变量代表命令行中所有参数的个数

$n 使用示例sum.sh

1
2
3
4
#!/bin/bash
num=$1
num2=$2
sum=$(($num1+num2))

执行上述sum.sh脚本:

./sum.sh 100 200

输出为300

$* [email protected] $# 使用示例 sum1.sh

1
2
3
4
#!/bin/bash
echo "\$* 参数是: $*"
echo "\@* 参数是: [email protected]"
echo "\#* 参数个数是: $#"

$* [email protected] 使用示例 sum2.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
for i in "$*"

#!/bin/bash
for i in "$*"
$*中的所有参数看成是一个整体,所以这个for循环只会循环一次。
do
echo " The parameter is : $i"
done
for y in "[email protected]"
[email protected]中的每个参数都看很是独立的,所有"[email protected]"中有几个参数,就会循环几次
do
echo "Parameter : $y "
done

预定义变量

1
2
3
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数,由命令自己决定),则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)

使用示例:

1
2
3
4
5
ls
echo $? #将在终端打印结果为0

ls QERTYUTIYKNB
echo $? #将在终端打印结果为2(非0)

其实,逻辑运算符&&(逻辑与运算)和||(逻辑或运算)就是通过判断前一个命令的返回值来判断命令是否正确执行。

1
2
ls && echo yes
ls || echo no
0%