shell

shell.1.2 bash特性:命令行展开、命令的执行状态结果、引用、快捷键

一、命令行展开
~ : 自动展开为用户的主目录,或指定的用户的主目录 ;
{}: 可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

eg.
创建目录 /tmp/x , /tmp/x/y1 , /tmp/x/y2 , /tmp/x/y1/a , /tmp/x/y1/b

[root@localhost ~]# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory ‘/tmp/x/y1/a’
mkdir: created directory ‘/tmp/x/y1/b’
mkdir: created directory ‘/tmp/x/y2’

[root@localhost ~]# tree /tmp/x
/tmp/x
├── y1
│   ├── a
│   └── b
└── y2

4 directories, 0 files
[root@localhost ~]# 

[root@localhost ~]# mkdir -v {a,c}_{b,d}
mkdir: created directory ‘a_b’
mkdir: created directory ‘a_d’
mkdir: created directory ‘c_b’
mkdir: created directory ‘c_d’
[root@localhost ~]#

创建如下结构的目录

[root@localhost ~]# tree /tmp/mysysroot
/tmp/mysysroot
├── bin
├── etc
│   └── sysconfig
│       └── network-scripts
├── sbin
├── usr
│   ├── bin
│   ├── lib
│   ├── lib64
│   ├── local
│   │   ├── bin
│   │   ├── etc
│   │   ├── lib
│   │   └── sbin
│   └── sbin
└── var
    ├── cache
    ├── log
    └── run

19 directories, 0 files
[root@localhost ~]#

创建过程如下

[root@localhost ~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
mkdir: created directory ‘/tmp/mysysroot’
mkdir: created directory ‘/tmp/mysysroot/bin’
mkdir: created directory ‘/tmp/mysysroot/sbin’
mkdir: created directory ‘/tmp/mysysroot/etc’
mkdir: created directory ‘/tmp/mysysroot/etc/sysconfig’
mkdir: created directory ‘/tmp/mysysroot/etc/sysconfig/network-scripts’
mkdir: created directory ‘/tmp/mysysroot/usr’
mkdir: created directory ‘/tmp/mysysroot/usr/bin’
mkdir: created directory ‘/tmp/mysysroot/usr/sbin’
mkdir: created directory ‘/tmp/mysysroot/usr/local’
mkdir: created directory ‘/tmp/mysysroot/usr/local/bin’
mkdir: created directory ‘/tmp/mysysroot/usr/local/sbin’
mkdir: created directory ‘/tmp/mysysroot/usr/local/etc’
mkdir: created directory ‘/tmp/mysysroot/usr/local/lib’
mkdir: created directory ‘/tmp/mysysroot/usr/lib’
mkdir: created directory ‘/tmp/mysysroot/usr/lib64’
mkdir: created directory ‘/tmp/mysysroot/var’
mkdir: created directory ‘/tmp/mysysroot/var/cache’
mkdir: created directory ‘/tmp/mysysroot/var/log’
mkdir: created directory ‘/tmp/mysysroot/var/run’

tree – list contents of directories in a tree-like format.
tree [-acdfghilnpqrstuvxACDFQNSUX] [-L level [-R]] [-H baseHREF] [-T title] [-o filename] [–nolinks]
[-P pattern] [-I pattern] [–inodes] [–device] [–noreport] [–dirsfirst] [–version] [–help]
[–filelimit #] [–si] [–prune] [–du] [–timefmt format] [directory …]

OPTION:
-L level : 指定要显示的层级;不指定,则默认显示所有目录层级;

eg.
列出 /etc 目录下的2层结构树:
[root@localhost ~]# tree -L 2 /etc
/etc
├── adjtime
├── aliases
├── aliases.db
├── alternatives
│   ├── ld -> /usr/bin/ld.bfd
│   ├── libnssckbi.so.x86_64 -> /usr/lib64/pkcs11/p11-kit-trust.so
│   ├── mta -> /usr/sbin/sendmail.postfix
│   ├── mta-aliasesman -> /usr/share/man/man5/aliases.postfix.5.gz
│   ├── mta-mailq -> /usr/bin/mailq.postfix
│   ├── mta-mailqman -> /usr/share/man/man1/mailq.postfix.1.gz
│   ├── mta-newaliases -> /usr/bin/newaliases.postfix
│   ├── mta-newaliasesman -> /usr/share/man/man1/newaliases.postfix.1.gz
│   ├── mta-pam -> /etc/pam.d/smtp.postfix
│   ├── mta-rmail -> /usr/bin/rmail.postfix
.......
├── anacrontab
├── asound.conf
├── at.deny
├── audisp
│   ├── audispd.conf
│   └── plugins.d
├── audit
│   ├── auditd.conf
│   ├── audit.rules
│   ├── audit-stop.rules
│   └── rules.d
.......
├── yum.conf
└── yum.repos.d
    ├── CentOS-Base.repo
    ├── CentOS-CR.repo
    ├── CentOS-Debuginfo.repo
    ├── CentOS-fasttrack.repo
    ├── CentOS-Media.repo
    ├── CentOS-Sources.repo
    ├── CentOS-Vault.repo
    ├── epel.repo
    └── epel-testing.repo

172 directories, 372 files
[root@localhost ~]#

二、命令的执行状态结果

1、命令执行的状态结果,bash通过状态返回值来输出此结果;
>> 成功 : 0
>> 失败 : 1-255
2、命令执行完成后,其状态返回值保存于bash的特殊变量 $? 中;

eg.
[root@localhost ~]# cd /etc
[root@localhost etc]# echo $?
0
[root@localhost etc]# cddd /etc
-bash: cddd: command not found
[root@localhost etc]# echo $?
127
[root@localhost etc]# cd /etttt
-bash: cd: /etttt: No such file or directory
[root@localhost etc]# echo $?
1
[root@localhost etc]#

PS : 注意区分命令执行结果与命令执行的状态结果2者的区别
> 命令正常执行后,有的还返回有命令执行结果,即命令返回值;
> 根据命令及其功能不同,命令的执行结果各不相同;

[root@localhost ~]# ls
a_b  anaconda-ks.cfg  c_d                        nginx-1.12.2.tar.gz  php-7.0.26.tar.bz2
a_d  c_b              mysql-boost-5.7.20.tar.gz  pcre-8.41.tar.bz2
[root@localhost ~]# echo $?
0
[root@localhost ~]#

3、引用命令的执行结果
> $(COMMAND)
> `COMMAND`

~]# mkdir $(date +%H-%M-%S)
~]# ABC=`date +%H-%M-%S`

三、引用

> 强引用 : ” 不做变量的替换;
> 弱引用 : “” 做变量替换,引用变量的值;
> 命令引用: “     反引号;

四、快捷键

> Ctrl + a : 跳转至命令行行首
> Ctrl + e : 跳转至命令行行尾

> Ctrl + u : 删除行首至光标所在处之间的所有字符;
> Ctrl + k : 删除光标所在处至行尾的所有字符;

> Ctrl + l : 清屏,相当于 clear ;

Leave a Reply

Your email address will not be published. Required fields are marked *