Shell中引号的使用
Shell中支持的引号:””(双引号)、’’(单引号)、··(反引号)
单引号与双引号
作用:将字符串作为一个整体。
如我们创建文件时:
#不使用引号时,将创建3个文件
[root@localhost test]# touch a b c
[root@localhost test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 31 09:57 a
-rw-r--r-- 1 root root 0 Aug 31 09:57 b
-rw-r--r-- 1 root root 0 Aug 31 09:57 c
#使用引号则将a b c作为一个文件的文件名
[root@localhost test]# touch "a b c"
[root@localhost test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 31 09:57 a
-rw-r--r-- 1 root root 0 Aug 31 09:57 a b c
-rw-r--r-- 1 root root 0 Aug 31 09:57 b
-rw-r--r-- 1 root root 0 Aug 31 09:57 c
双引号与单引号的区别:
单引号可以屏蔽特殊符号,将特殊符号的特殊含义屏蔽,转化为字符表面的含义,不能解析变量。
# ‘#’号在Shell中为单行注释的标志,直接echo输出则#及后面的内容不会被执行
[root@localhost test]# echo #lsk
[root@localhost test]# echo "#ls"
#ls
[root@localhost test]# echo '#ls'
#ls
# 定义变量,直接echo输出及使用双引号,变量将被解析,使用单引号不能解析
[root@localhost test]# test="Hello World"
[root@localhost test]# echo $test
Hello World
[root@localhost test]# echo "$test"
Hello World
[root@localhost test]# echo '$test'
$test
# 使用\将$符进行转义,$转移为普通字符
[root@localhost test]# echo "\$test"
$test
[root@localhost test]# echo \$test
$test
反引号
反引号是一个命令替换符号,它可以使用命令的输出结果替代命令。
# 使用反引号将date命令的输出结果作为备份文件名的一部分
[root@localhost test]# tar -zcf log-`date +"%Y-%d-%m"`.tar.gz /var/log/
tar: Removing leading `/' from member names
[root@localhost test]# ls
a a b c b c log-2021-31-08.tar.gz
# 使用反引号将统计登录系统账户数作为值赋给变量
[root@localhost test]# userTotal=`who | wc -l`
[root@localhost test]# echo $userTotal
2
$()组合符号与反引号的功能相同
[root@localhost test]# echo "当前系统账户登录数量为:$(who | wc -l)"
当前系统账户登录数量为:2
[root@localhost test]# echo "当前系统账户登录数量为:$(who | wc -l)"
当前系统账户登录数量为:2
[root@localhost test]# ping -c2 $(hostname)
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms
--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.015/0.027/0.039/0.012 ms
Shell变量
Shell中变量的类型有:
- 自定义变量:用户自主设置的变量
- 环境变量:变量名通常大写,有操作系统维护
- 位置变量:bash内置变量,存储脚本执行时的参数
- 预定义变量:bash内置变量,可以调用但是不能修改
自定义变量
用户自定义变量时,变量名的规则:变量名仅可以使用字母、数字和下划线组合,但是不能以数字开头。在实际定义时最好使用比较容易理解的单词或拼音,切记不要使用随意的字符作为变量名,没有规律的变量名会让脚本的可阅读性变得极差。
定义变量格式:
变量名=变量值
取消变量:
unset 变量名
注意:=号两边不能有空格,不要使用关键字作为变量名,如:ls、cd等。
# 定义变量时=号两边有空格时将报错
[root@localhost test]# var ="value"
-bash: var: command not found
[root@localhost test]# var= "value"
-bash: value: command not found
[root@localhost test]# var = "value"
-bash: var: command not found
# 自定义变量
[root@localhost test]# var="value"
# 输出变量
[root@localhost test]# echo $var
value
# 取消变量
[root@localhost test]# unset var
[root@localhost test]# echo $var
[root@localhost test]#
当输出变量时,变量名后面直接跟其他字母、数字或下划线时,需要使用{}将变量名括起来。
[root@localhost test]# money=999
[root@localhost test]# echo $money
999
#变量名后直接跟字母将无任何输出,moneyRMB将作为整个变量名,未定义
[root@localhost test]# echo $moneyRMB
# 使用{}分隔变量名及其他字符
[root@localhost test]# echo ${money}RMB
999RMB
[root@localhost test]# echo $money_RMB
[root@localhost test]# echo $money12RMB
[root@localhost test]# echo ${money}12RMB
99912RMB
[root@localhost test]# echo ${money}_RMB
999_RMB
[root@localhost test]# echo $money:RMB
999:RMB
[root@localhost test]# echo $money-RMB
999-RMB
环境变量
环境变量一般存储在/etc/profile或~/.bash_profile中,可以使用命令env查看所有环境变量。
常用的环境变量有:
- PATH:系统环境变量路径
- PWD:用户当前工作目录
- USER:当前登录系统的用户名
- UID:当前账号的UID
- HOME:当前用户的家目录
- SHELL:当前用户的SHEEL解释器
- RANDOM:返回0~32767之间的随机整数
位置变量
位置变量是存储脚本执行时的参数,使用$n表示,n为整数序列,n大于9是整数需使用{}号分隔,如:$1、$2...${11}、${12}...
[root@localhost test]# vim test.sh
#!/bin/bash
# 接收并输出位置变量
echo $1
echo $2
echo $2
[root@localhost test]# chmod +x test.sh
[root@localhost test]# ./test.sh 11 22 33
11
22
22
预定义变量
预定义变量用来保存脚本程序的执行信息。可以直接使用,