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 用来获取目录名称,及文件名之前的所有

原文地址:https://www.cnblogs.com/quzq/p/11266193.html