1.shell中变量名称的规范
变量名称中通常包含大小写字母,数字,下划线
不是变量名中同时需要具备字母、数字、下划线,变量名只能出现这三种字符
变量名不能以数字开头,只能以字母或者下划线开头
变量名称格式定义:
WESTOS_LINUX
Westos_Linux
westoS_Linux
2.字符的转译
\反斜杠 | 转译单个字符 |
---|---|
""双引号 | 弱引用,批量转译 “” 中出现的字符 |
''单引号 | 强引用,批量转译 ‘’ 中出现的字符 |
‘’ 与 “” 两者的区别在于 | “” 不能转译 " \ 反斜杠","`反向单引号","!感叹号","$" |
\转义单个字符或者字符串
''强引用,也是转义,可以转移元字符
""弱引用,也是转义,不能转义元字符
元字符: * # ? ! `` 这些字符都有自身的含义,需要转义
3.变量的声明(系统中存在的变量)
${}:变量声明
a=1在shell中直接定义a的值为1
echo $ab(默认会寻找ab这个整体的变量的值)
echo ${a}b这样才能声明a是变量
a=(1 2 3)定义一个数组
echo $a不可以
echo ${a[0]}输出数组的第一个元素
echo ${a[1]}输出数组的第二个元素
echo ${a[*]}输出数组的所有元素
4.变量值传递
$1 | 脚本后的第一串字符串 |
---|---|
$2 | 脚本后的第二串字符串 |
$3 | 脚本后的第三串字符串 |
$# | 脚本后所跟字符串的个数 |
$* | 脚本后跟的所有字符串,模式为“ 1 2 3 ” |
$@ | 脚本后跟的所有字符串,模式为“ 1”“2”“3” |
$$ | 当前进程的pid |
vim test1.sh编辑测试文件
写入:
#!/bin/bash
echo \$0 is $0
echo \$1 is $1
echo \$2 is $2
echo \$3 is $3
echo \$# is $#
echo \$* is $*
echo \$@ is $@
sh test.sh
发现:
$0 是脚本名字
vim test.sh
加入echo \$\$ is $$
sh test.sh
ps发现没有pid
vim test1.sh
加入watch -n 1 date
chmod +x test.sh
/mnt/test.sh(sh test.sh)
ctrl+z
ps f 可以看出当前shell的pid
看到pid,发现$$是当前进程的pid
kill -9 pid就是关掉当前的shell
vim test1.sh
注释掉监控命令
/mnt/test.sh westos
$1是脚本后面的第一个字符
/mnt/test.sh westos linux
$2是脚本后面的第一个字符
/mnt/test.sh westos linux haha
$3是脚本后面的第一个字符
$#是脚本后面所跟字符的个数
$* 与 $@均是所有所跟字符(看起来作用一样,其实作用不一样)
接下来解释$*与$@的区别
vim test1.sh编辑测试文件
写入:
for i in "$*"
do
echo $i
done
sh test1.sh 1 2 3
sh -x test1.sh 1 2 3 ($*代表只执行一次)
$*="1 2 3"
vim test1.sh编辑测试文件
for i in "$@"
do
echo $i
done
sh test1.sh 1 2 3 4
sh -x test1.sh 1 2 3 4($@代表只执行四次)
$@="1" "2" "3" "4"