变量一般使用大写
1.变量名的命名规则
1.只包含字母、数字和下划线—— 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。一般大写
2.不能以数字开头—— 变量名不能以数字开头,但可以包含数字。
3.避免使用 Shell 关键字—— 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
4.使用大写字母表示常量—— 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
5.避免使用特殊符号—— 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
6.避免使用空格—— 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。
2.变量的类型
declare:声明
shell本身不支持小数。(需要借助bc工具)
declare –a name | 数组array |
declare –f name | 方法function |
declare –F name | 同上,但只显示function的名字 |
declare –i name | 整数integer |
declare –r name | 只读,相当于readonly name |
declare –x name | export, 即不仅在当前的环境中起作用,也在外部的shell环境中起作用 |
3.变量的使用
使用变量时加 $ 符号
3.1.赋值
# 正确的赋值
t1="变量t1"
# 有可能会导致错误
t1 = "变量t1
# 取消变量
unset t1
3.2.打印
t1="变量t1"
echo $t1
echo ${t1} #加花括号是为了帮助解释器识别变量的边界
3.3.改变变量
my_name="alan" #第一次赋值
echo ${my_name}
my_name="tom"
echo ${my_name} #打印——tom
3.4.只读变量readonly
t1="I am t1"
readonly t1
t1="temp1" #报错——This variable is read only.
#合起来——
readonly t3="I am t3"
t3="temp3" #报错——This variable is read only.
unset 命令不能删除 只读变量 ——
4.特殊变量【重点】
4.1.预定义变量
$$ ——Shell本身的PID
$! ——最后运行的后台命令的PID
$? ——最后运行的命令的结束代码(返回值)
$- ——使用Set命令设定的Flag一览
$* ——所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ ——所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# ——添加到Shell的参数个数
$HOME——当前用户的主目录。
$USER——当前用户的用户名。
$PATH——可执行文件的搜索路径。
$PWD——当前工作目录。
$OLDPWD——前一个工作目录。
$SHELL——当前使用的Shell。
# 编写脚本——test.sh
#!/bin/bash
#Author: user
echo "脚本名称——$0"
echo "第一个参数——$1"
echo "所有参数 (作为单字符串显示)——$*"
echo "所有参数 (作为独立字符串显示)——$@"
echo "参数个数——$#"
echo "最后执行的命令的退出状态——$?"
echo "当前Shell的进程ID——$$"
sleep 10 &
ps aux |grep sleep
echo "最后运行的后台命令的进程ID——$!"
echo "当前用户的主目录——$HOME"
echo "当前用户的用户名——$USER"
echo "可执行文件的搜索路径——$PATH"
echo "当前工作目录——$PWD"
echo "当前使用的Shell——$SHELL"
bash test.sh 1 2 3 4 5 6 7
4.2.位置变量
$1~$n ——系统内置变量——添加到Shell的各参数值。$1是第1参数、$2是第2参数…
$1 在shell中称为“位置参数”,表示传入的第1个参数(第1个入参)
用在shell脚本主体中,表示shell脚本的第1个入参。
用在shell脚本函数里,表示函数的第1个入参。
- $0 就是你写的shell脚本本身的名字
- $1 是你给你写的shell脚本传的第一个参数
- $2 是你给你写的shell脚本传的第二个参数
- ${10} 第10个及以上的参数,需要使用大括号括起来。
test -z $1 是一个判断表达式,用于判断$1的值是否为空字符串。若为空,则结果为true;否则为false。
vim test.sh
#
#!/bin/bash
#Author: user
echo $0 # 打印脚本文件名
echo "第一个变量——" $1
echo "第三个变量——" $3
echo "第十个变量——" ${10}
echo "脚本名称——" $0
bash test.sh 1 2 3 4 5 6 7 8 9 10
4.3.环境变量
# 查看当前的环境变量
env
# 临时设置环境变量(临时设置的环境变量仅在当前Shell会话中有效)
export VAR="Hello world"
echo $VAR
# 永久设置当前用户的环境
vim ~/.bashrc
# 或
vim ~/.bash_profile
#永久设置全局的环境变量
vim /etc/profile
5.交互自定义变量
read 命令用于从标准输入(通常是键盘)读取一行输入,并将其分配给一个或多个变量。
参数解释:
-p:在读取输入之前显示提示。
-t:设置超时时间(秒)。
-n:读取指定字符数后立即返回,而不是等待换行符。
-r:原样读取输入,不解释反斜杠。
-s:隐藏输入的字符(通常用于密码输入)。
vim test.sh
#
#!/bin/bash
#Author: user
read -p "输入用户名1: " NAME1
echo ${NAME1}
read -n3 -p "输入用户名:-n3 : " NAME2
echo " : ${NAME2}"
read -s -p "输入用户名: -s: " NAME3
echo " : ${NAME3}"
read -t5 -p "输入用户名: -t5: " NAME4
echo " : ${NAME4}"
6.相关符号:
1.双引号:双引号将变量值中的空格,转移为一个普通的字符
tiem="I AM ALAN"
echo $time
2.反引号:优先执行
time=date
echo $time
#
time=`date`
echo $time
3.小括号:可以使用命令替换,将命令的输出赋值给变量
time=$(date)
echo $time