Shell学习笔记 - Shell变量


一、变量的命名
变量名必须以字母或下划线开头,由字母、数字、或下划线组成,变量名的长度不能超过255个字符。
 
二、变量的分类
1. 用户自定义变量
 
2. 环境变量
 
3. 位置参数变量
 
4. 预定义变量
 
三、用户自定义变量
用户自定义变量是“局部变量”,只能在当前的Shell中生效
 
1. 定义变量
变量名=变量值
 
示例:
 
 
注意:等号前后不能有空格,否则会出现以下错误提示:
 
 
2. 变量调用
$变量名 或 ${变量名}
 
示例:
 
 
3. 变量叠加
示例:
 
 
 
4. 删除变量
unset 变量名
 
示例:
 
 
5. 查看变量
1) env:查看所有的环境变量
 
2) set:查看所有的变量(包括用户自定义变量)
 
四、环境变量
环境变量是“全局变量”,在当前Shell和这个Shell的所有子Shell中生效
 
1. 设置环境变量
export 变量名=变量值
 
 
变量名=变量值
 
export 变量名
 
示例:
 
 
注意:设置环境变量时,建议使用大写,避免与用户自定义变量或系统命令(都是小写的)冲突。
 
2. 删除环境变量,环境变量调用,查看环境变量
用户自定义变量的使用方式相同
 
3. 设置PS1环境变量
PS1环境变量会影响用户提示符信息,示例如下:
 
 
五、位置变量
1. $n
n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}。
 
示例:
 
#!/bin/bash
a=$1
b=$2
sum=$(($a +$b))
echo $sum
2. $*
这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
 
 
#!/bin/bash
for i in "$*"
do
    echo $i
done
 
#运行:test.sh 1 2 3
#输出:1 2 3
#解释:$*中的所有参数被看成是一个整体,所以这个for循环只会循环一次
 
3. $@
这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
 
 
#!/bin/bash
for i in "$@"
do
    echo $i
done
#运行:test.sh 1 2 3
#输出:
3
#解释:$@中的每个参数被看成独立的,所以这个for循环会循环多次
 
4. $#
这个变量代表命令行中的所有参数的个数
 
#!/bin/bash
echo $#
 
#运行:test.sh 1 2 3
#输出:3
六、预定义变量
1. $?
最后一次执行的命令的返回状态。如果这个值为0,则说明上一个命令执行正确;如果这个值不为0,则代表上一个命令执行的错误码。
 
示例:
 
 
2. $$
当前进程的进程号(PID)
 
示例:
 
 
 
3. $!
后台运行的最后一个进程的进程号(PID)
 
#!/bin/bash
 
find /root -name "test.sh" &
echo $!
七、read命令
接受键盘输入
 
1. 参数说明
-p "提示信息": 在等待read输入时,输出的提示信息
 
-t 秒数:read命令会一直等待用户输入,使用此参数可以指定等待时间
 
-n 字符数:read命令只接受指定的字符数,就会继续执行
 
-s : 隐藏输入的数据,适用于机密信息的输入
 
2. 示例
 
#!/bin/bash
 
read -p "please input username:" username
read -p "please input password:" -s password
echo -e "\n"
read -p "please input sex[F/M]:" -n 1 sex
echo -e "\n"
echo "Welcome $username[$sex]"

相关内容