一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的?shell会去$PATH环境变量定义的目录里去找这个命令。环境变量里一般包括/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 这么多目录,这些目录下又有上千个程序,从这么多目录里的,这么多程序里查找肯定是花费时间的。shell为了提高查找效率,使用了缓存机制,这个机制叫hash 。。 有了hash缓存后,shell先去hash里查找,如果找到了,就使用;如果没有找到,才去$PATH环境变量定义的目录里去找,找到后,把命令的路劲加程序名放入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变量的作用域
三,如何执行shell脚本文件1,用chmod 赋予shell文件可执行权限。 ./shell.sh
2,把shell文件(这个文件不需要有执行权限)作为参数,传给bash程序。 bash shell.sh
练习1 1,显示/etc目录下所有以p(不区分大小写)开头的文件或者目录本身。 2,显示/var目录下的所有文件或目录,并将显示结果中的小写字母转换为大写后显示 3,创建临时文件/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进程
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
|