变量 & 环境变量 &(位置变量 参数)
变量
变量的定义
变量的命名规则
字母、数字、下划线
不以数字开头
变量的赋值
变量赋值的过程,成为变量替换
变量名=变量值(等号两边不能有空格)
a=123
使用let为变量赋值(可以让变量进行计算)
let a=10+20
将命令赋值给变量(很少用,无意义)
l=ls
将命令结果赋值给变量,使用 $( ) 或者 ` ` (当命令会多次执行时,可以赋值给变量,通过调用变量以减少系统开销)
letc=$(ls -l /etc)
变量值有空格等特殊字符可以包含在 " " 或 ' ' 中
变量的引用
${变量名} 称作对变量的引用
echo ${变量名} 查看变量的值
${变量名} 在部分情况下可以省略为 $变量名
Demo
string1="hello bash"
echo $string1
echo ${string1}
echo $string123
echo ${string1}23
变量的作用范围
变量的默认作用范围
只针对当前的终端或当前的 Shell 生效(子、父、平行均不生效)
变量的导出
export(导出变量,让子进程得到父进程的变量)
变量的删除
unset
Demo1
[root@localhost ~]# a=1
[root@localhost ~]# bash
[root@localhost ~]# echo $a
[root@localhost ~]# a=2
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $a
1Demo2
demo_var1="hello subshell"
vim demo2.sh
#!/bin/bash
echo $demo_var1
chmod u+x demo2.sh[root@localhost ~]# bash demo1.sh
[root@localhost ~]# ./demo1.sh
[root@localhost ~]# source demo1.sh
hello subshell
[root@localhost ~]# . demo1.sh
hello subshell导出变量,让子进程得到父进程的变量
[root@localhost ~]# export demo_var1
[root@localhost ~]# bash demo1.sh
hello subshell
[root@localhost ~]# ./demo1.sh
hello subshell删除变量(用于某一变量在脚本中反复使用时取消变量)
[root@localhost ~]# unset demo_var1
[root@localhost ~]# echo $demo_var1
环境变量
系统环境变量
环境变量:每个 Shell 打开都可以获得到的变量
set 和 env 命令
$PATH
$PS1
预定义变量
$?
$$ (进程PID)
$0 (进程名称)
$! (上一个在后台工作的进程的进程号)
$_ (上一个执行的命令或脚本的最后一个参数)
$* (所有位置参数视为一个整体字符串)
$@ (所有位置参数视为单独的字符串)
$# (位置参数的数量)
位置变量
$1 $2 ... $n 从${10}开始,参数号需要用大括号括起来,如${10}、${11}、${100}等。
内部参数分两类,一类是命令行参数相关的

另一类内部参数是与进程状态相关的

Demo1 - 预定义变量
cat demo1.sh
#!/bin/bash
echo $$
echo $0[root@localhost ~]# bash demo1.sh
21330
demo.sh
[root@localhost ~]# source demo1.sh
19781
bashDemo2 - 位置变量
cat demo2.sh
#!/bin/bash
echo $1
echo $2
chmod u+x demo2.sh[root@localhost ~]# ./demo2.sh -a -l
-a
-l
[root@localhost ~]# ./demo2.sh -a
-a
避免位置参数为空值的小技巧1(不完美,若位置变量不为空则会导致增加_)
cat demo2.sh
#!/bin/bash
echo $1
echo $2_
# 增加执行权限
chmod u+x demo2.sh[root@localhost ~]# ./demo2.sh -a
-a
_
[root@localhost ~]# ./demo2.sh -a -l
-a
-l_避免位置参数为空值的小技巧2(完美,此方式称为参数替换)
cat demo2.sh
#!/bin/bash
echo $1
echo ${2-_}
# 增加执行权限
chmod u+x demo2.sh[root@localhost ~]# ./demo3.sh -a
-a
_
[root@localhost ~]# ./demo3.sh -a -l
-a
-l环境变量配置文件
配置文件
/etc/profile
/etc/profile.d/
~/.bash_profile
~/.bashrc
/etc/bashrc
/etc 下的配置文件是给所有用户公用的
login shell : su - userName
所有配置文件均会执行,顺序如下:(可以在每个文件开头增加 echo 命令进行验证)
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
nologin shell : su userName
只有bashrc执行,顺序如下:
.bashrc
/etc/bashrc
Last updated