一,思考一個問題,當在shell里執(zhí)行某個程序時,shell是怎么找到這個程序的?shell會去$PATH環(huán)境變量定義的目錄里去找這個命令。環(huán)境變量里一般包括/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 這么多目錄,這些目錄下又有上千個程序,從這么多目錄里的,這么多程序里查找肯定是花費時間的。shell為了提高查找效率,使用了緩存機制,這個機制叫hash 。。 有了hash緩存后,shell先去hash里查找,如果找到了,就使用;如果沒有找到,才去$PATH環(huán)境變量定義的目錄里去找,找到后,把命令的路勁加程序名放入hash中。 注意:如果是shell的buildin命令,不會放入hash。 hash命令用法: 查看hash里都緩存了哪些程序:hash hits:代表此命令,被命中了幾次。 # hash
hits command
1 /usr/bin/cat
2 /usr/bin/ls 詳細查看hash里都緩存了哪些程序:hash -l # hash -l
builtin hash -p /usr/bin/cat cat
builtin hash -p /usr/bin/ls ls 清除某個緩存:hash -d cat # hash -d cat
# hash
hits command
2 /usr/bin/ls 清除所有緩存:hash -r # hash -r
# hash
hash: hash table empty 為什么還要清除緩存?理由:當把命令移動到別的目錄后,用原來的緩存就找不到命令了,shell會報出錯誤,所有要清除。
二,bash變量的作用域
三,如何執(zhí)行shell腳本文件1,用chmod 賦予shell文件可執(zhí)行權(quán)限。 ./shell.sh
2,把shell文件(這個文件不需要有執(zhí)行權(quán)限)作為參數(shù),傳給bash程序。 bash shell.sh
練習1 1,顯示/etc目錄下所有以p(不區(qū)分大小寫)開頭的文件或者目錄本身。 2,顯示/var目錄下的所有文件或目錄,并將顯示結(jié)果中的小寫字母轉(zhuǎn)換為大寫后顯示 3,創(chuàng)建臨時文件/tmp/myfile.XXXX #!/bin/bash
ls -ld /etc/p*
ls -d /var/* | tr 'a-z' 'A-Z'
mktemp /tmp/myfile.XXXX
四,bash配置文件1,啟動shell進程的種類: 交互方式啟動的shell進程 非交互方式啟動的shell進程 使用su命令:su username ,登錄后,啟動的shell進程 在gnome或者kde下打開終端后,啟動的shell進程 執(zhí)行shell腳本文件時,啟動的shell進程
2,bash配置文件的種類 profile類 /etc/profile /etc/profile.d/*.sh
bashrc類
3,bash配置文件的加載順序。 4,重新加載配置文件 當修改配置文件后,是不會立即生效的 使用source 配置名 ,讓修改的配置立即生效
五,用emacs編寫shell腳本1,自動補全的快捷鍵:ESC TAB # c/c++ 學習互助QQ群:877684253
![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg)
# 本人微信:xiaoshitou5854
|