shell通配符, 变量, shell作用域, $#@*等说明
1. 指定格式输出当前时间:
echo `date +%Y%m%d` # 注意使用反引号, +号后面不要有空格
反引号中的东西会被当做命令来执行, 并输出执行的结果
2. $uid用于判断当前是否是root用户登陆的, 是为0, 否则非零.
3. * 匹配任意多个字符, 注意不要带引号; ? 匹配任意一个字符
[a-Z] 匹配任意小写或大写字母; [0-9] 任意数字; [abc] abc中任意一个
[^abc] 取反的意思, 匹配任意非abc的一个字符;
() 在子shell中执行括号中的命令, 如(ls), (cd xx/yy);
{} 集合; mkdir -p a/{b,c}; a目录下有b和c目录
mkdir -p a{b/m,c/n}; a目录下有b和c目录, b下有m,c下有n
还可嵌套使用: mkdir -p a{b/{x,y},c/n}; b下有x,y两个目录
{} 中的元素会被挨个拼接, 用法如下:
4. shell中变量的使用(使用$ip来引用变量):
shell中变量赋值可分为两类, 分别是显示赋值和隐式赋值
ip=1.1.1.1 或者 read ip; # read命令会读取命令行中的输入内容, 并赋值给变量ip
read -p "请输入内容: " ip
5. shell中的位置变量,
与普通变量不同, 普通变量都需要先定义(无论是显示赋值还是read), 再通过$name来引用; 而位置变量不同,
位置变量是系统内置的, 无需定义, 直接在使用处通过$number来引用即可, 其会自动从命令行中对应位置获取
值并引用.
6. shell中变量分类(当前shell和全局):
直接定义的ip=1.1.1.1只在当前shell中有效, 可使用export ip来使ip为全局作用域生效, 此处全局也只限于当前shell
及其子shell中使用, 跨端的shell是引用不到的.
7. 注意理解当前shell和子shell的区别, 当前shell中不使用export定义的变量, 使用bash, sh或相对路径执行的文件内是
引用不到变量的, 但是使用. 或者 source执行的文件是可以引用的; 同理在文件中定义的变量, 要想在shell中引用到
就必须使用. 或source来执行, 因为这两种方式是在当前shell中执行文件内容的.
反引号中的命令也是在子shell中执行的, 如果在反引号中调用函数, 则在当前shell中无法引用到函数中不适用local定义
定义的变量, 就是因为反引号造成的.
8. 查看系统中已存的所有环境变量, 直接输入: env 回车即可.
basename 用来获取文件名, 使用$0时,获取到的是输入可能是带路径的文件, 常配合basename使用来获取文件名
如: basename $0; dirname 用来获取目录名称,及文件名之前的所有