2、bash的工作特性之命令狀態返回值和命令展開所涉及的內容及其示例演示
bash的基礎特性:命令的執行狀態結果
命令執行的狀態結果:
bash通過狀態返回值來輸出此結果:
成功:0
失敗:1-255
命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中;
命令正常執行時,有的還會有命令返回值:
根據命令及其功能不同,結果各不相同;
實例:
[root@zck ~]# echo $SHELL /bin/bash [root@zck ~]# echo $? 0 [root@zck ~]# 12name=VBird bash: 12name=VBird: command not found... #發生錯誤 [root@zck ~]# echo $? 127 #錯誤代碼127,錯誤代碼返回值根據軟件而有不同,我們可根據代碼來找出錯誤的原因。 [root@zck ~]# echo $? 0 #這里返回了正確的值,這是因為“?”只與“上一個執行命令”有關, #所以,我們上一個命令執行的是“echo $?”,所以返回正確的值0。
3、請使用命令行展開功能來完成以下練習:
(1)創建/tmp目錄下的:a_c、a_d、b_c、b_d
[root@zck ~]# mkdir -v /tmp/{a,b}_{c,d} mkdir: created directory ‘/tmp/a_c’ mkdir: created directory ‘/tmp/a_d’ mkdir: created directory ‘/tmp/b_c’ mkdir: created directory ‘/tmp/b_d’
(2)創建/tmp/mylinux目錄下的
/tmp/mylinux/
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
[root@zck ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/ network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} mkdir: created directory ‘/tmp/mylinux’ mkdir: created directory ‘/tmp/mylinux/bin’ mkdir: created directory ‘/tmp/mylinux/boot’ mkdir: created directory ‘/tmp/mylinux/boot/grub’ mkdir: created directory ‘/tmp/mylinux/dev’ mkdir: created directory ‘/tmp/mylinux/etc’ mkdir: created directory ‘/tmp/mylinux/etc/rc.d’ mkdir: created directory ‘/tmp/mylinux/etc/rc.d/init.d’ mkdir: created directory ‘/tmp/mylinux/etc/sysconfig’ mkdir: created directory ‘/tmp/mylinux/etc/sysconfig/network-scripts’ mkdir: created directory ‘/tmp/mylinux/lib’ mkdir: created directory ‘/tmp/mylinux/lib/modules’ mkdir: created directory ‘/tmp/mylinux/lib64’ mkdir: created directory ‘/tmp/mylinux/proc’ mkdir: created directory ‘/tmp/mylinux/sbin’ mkdir: created directory ‘/tmp/mylinux/sys’ mkdir: created directory ‘/tmp/mylinux/tmp’ mkdir: created directory ‘/tmp/mylinux/usr’ mkdir: created directory ‘/tmp/mylinux/usr/local’ mkdir: created directory ‘/tmp/mylinux/usr/local/bin’ mkdir: created directory ‘/tmp/mylinux/usr/local/sbin’ mkdir: created directory ‘/tmp/mylinux/var’ mkdir: created directory ‘/tmp/mylinux/var/lock’ mkdir: created directory ‘/tmp/mylinux/var/log’ mkdir: created directory ‘/tmp/mylinux/var/run’ [root@zck ~]# tree /tmp/mylinux/ /tmp/mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run 24 directories, 0 files
4、文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。
匹配模式:元字符
*:匹配任意長度的任意字符
pa*,*pa*,*pa,*p*a*
pa,paa,passwd
?:匹配任意單個字符
pa?,??pa,p?a,p?a?
pa,paa,paawd
[]:匹配指定范圍內的任意單個字符
有幾種特殊格式:
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]]:指定匹配所有大寫字母
[[:lower:]]:指定匹配所有小寫字母
[[:alpha:]]:匹配所有字母
[[:digit:]]:匹配所有數字
[[:alnum:]]:匹配所有的字母和數字
[[:space:]]:匹配所有空白字符
[[:punct:]]:匹配所有標點符號
pa[0-9][0-9],2[0-9][0-9]
[^]:匹配指定范圍外的任意單個字符
[^[:upper:]]:匹配不是大小的字母
[^0-9]:匹配不是數字的字符
[^[:alnum:]]:匹配不是字母即不數字的字符
touch 命令
touch – change file timestamps
改變文件或目錄時間
【SYNOPSIS】
touch [OPTION]… FILE…
【OPTIONS】
-a:僅修改access time(時間);
-m:僅修改modify time(更改時間);
-c:僅修改文件的時間,若該文件不存在則不創建新文件;
-t:STAMP,后面可以接需要修改的時間而不用系統當前的時間,格式為[YYMMDDhhmm]或[[CC]YY]MMDDhhmm[.ss]
-d:后面可以接需要修改的日期而不用系統當前的日期,也可以使用–date="日期或時間"
【EXAMPLES】
實例1:新建一個空的文件并查看時間
[root@zck test]# touch test1 [root@zck test]# ls -l test1 -rw-r--r--. 1 root root 0 Aug 17 23:28 test1 [root@zck test]# stat test1 #查看文件時間戳信息 File: ‘test1’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 72449663 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2016-08-17 23:28:18.678545086 +0800 #訪問時間 Modify: 2016-08-17 23:28:18.678545086 +0800 #更改時間 Change: 2016-08-17 23:28:18.678545086 +0800 #改動時間 Birth: - #touch創建文件,如果該文件不存在,則會該文件的三個時間(atime、ctime、mtime)都會更新為系統當前時間。
實例2:將~/.bashrc復制成bashrc,-a復制所有屬性,查看文件時間戳信息
[root@zck test]# cp -a ~/.bashrc bashrc [root@zck test]# stat bashrc File: ‘bashrc’ Size: 194 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 72458496 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2016-08-17 08:43:14.717066234 +0800 #訪問時間 Modify: 2016-08-15 14:38:15.169080971 +0800 #更改時間 Change: 2016-08-17 23:36:50.167559330 +0800 #改動時間
實例3:將bashrc文件日期調整為兩天前
[root@zck test]# touch -d "2 days ago" bashrc [root@zck test]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r--. 1 root root 194 Aug 16 09:07 bashrc -rw-r--r--. 1 root root 194 Aug 16 09:07 bashrc -rw-r--r--. 1 root root 194 Aug 18 09:07 bashrc #(atime/mtime)由18日變成了16日,但是ctime并沒有跟著改變
實例4:將上實例3的bashrc日期改為 2007/09/15 2:02
[root@zck test]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r--. 1 root root 194 Sep 15 2007 bashrc -rw-r--r--. 1 root root 194 Sep 15 2007 bashrc -rw-r--r--. 1 root root 194 Aug 18 09:16 bashrc #(atime/mtime)都改變了,但是ctime則是當前文件修改的時間#
5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
5.1 alias 命令
Define or display aliases
定義或顯示別名
【SYNOPSIS】
alias [name[=value] … ]
【OPTIONS】
-p:列出當前所有的別名設置;
【EXAMPLES】
[root@zck ~]# alias #顯示當前所有的命令別名 alias cls='clear' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@zck ~]# alias md=mkdir #將mkdir命令設置別名為md; [root@zck ~]# alias md alias md='mkdir' [root@zck ~]# md dir1 [root@zck ~]# ll -d dir1/ drwxr-xr-x. 2 root root 6 Aug 18 10:07 dir1/ [root@zck ~]# alias dir='ls -al' #將'ls -al'命令設置別名為dir [root@zck ~]# dir 總結:在命令行中定義的別名,僅對當前shell進程有效,如果想長久有效,需要在配置文件中添加此別名定義: ~/.bashrc:僅對當前用戶有效 /etc/bashrc:對所有用戶有效
5.2 如何在命令中引用另一個命令的執行結果?
引用命令的執行結果:
$(COMMAND)或`COMMAND`
【EXAMPLES】
[root@zck ~]# echo $(date) Thu Aug 18 10:27:15 CST 2016 [root@zck ~]# echo `date` Thu Aug 18 10:27:26 CST 2016
6、顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄;
[root@zck ~]# ls /var | grep '1.*[[:digit:]]\+.*[[:lower:]]$'
7、顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;
[root@zck ~]# ls /etc | grep '^[[:digit:]].*[^[:digit:]]$' 3ab23y
8、顯示/etc目錄下,以非字母開頭,后面跟一個字母及其它任意長度任意字符的文件或目錄。
[root@zck ~]# ls /etc | grep '^[^[:alpha:]][[:alpha:]].*' 3ab23y
9、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@zck ~]# mkdir /tmp/tfile-`date +%F-%H-%M-%S` [root@zck ~]# ll -d /tmp/tfile-2016-08-18-11-00-23 drwxr-xr-x. 2 root root 6 Aug 18 11:00 /tmp/tfile-2016-08-18-11-00-23
10、復制/etc目錄下,所有以p開頭,以非數字結尾的文件或目錄至/tmp/mytest1目錄中。
[root@zck ~]# mkdir /tmp/mytest1 [root@zck ~]# cp -r /etc/p*[^0-9] /tmp/mytest1 [root@zck ~]# ls /tmp/mytest1 pam.d pbm2ppa.conf plymouth popt.d prelink.conf.d profile.d purple passwd pinforc pm postfix printcap protocols python passwd- pki pnm2ppa.conf ppp profile pulse
11、復制/etc目錄下,所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
[root@zck ~]# mkdir /tmp/mytest2 [root@zck ~]# cp -r /etc/*.d /tmp/mytest2 [root@zck ~]# ls /tmp/mytest2 auto.master.d dracut.conf.d logrotate.d profile.d rc.d sysctl.d bash_completion.d exports.d modprobe.d rc0.d request-key.d tmpfiles.d binfmt.d gdbinit.d modules-load.d rc1.d rsyslog.d usb_modeswitch.d cgconfig.d grub.d my.cnf.d rc2.d rwtab.d xinetd.d chkconfig.d init.d oddjobd.conf.d rc3.d sane.d yum.repos.d cron.d ipsec.d pam.d rc4.d setuptool.d depmod.d ld.so.conf.d popt.d rc5.d statetab.d dnsmasq.d libibverbs.d prelink.conf.d rc6.d sudoers.d
12、復制/etc目錄下,所有以l或m或n開頭,以.conf結尾的文件或目錄至/tmp/mytest3目錄中。
[root@zck ~]# mkdir /tmp/mytest3 [root@zck ~]# cp /etc/{l,m,n}*.conf /tmp/mytest3 [root@zck ~]# ls /tmp/mytest3 ld.so.conf libuser.conf logrotate.conf mke2fs.conf nfsmount.conf ntp.conf libaudit.conf locale.conf man_db.conf mtools.conf nsswitch.conf numad.conf
原創文章,作者:zhuckee,如若轉載,請注明出處:http://www.www58058.com/37309
贊~