1 认识bash shell
优点:
- 命令记忆功能(history):~/.bash_history记录的是前一次登录以前所执行的命令,而至于这一次登录执行的命令都被暂存在临时内存中,当注销系统的时候,才会保存到~/.bash_history中。
- 命令与文件补全功能([Tab]键的好处)
- 命令别名设置功能:alias lm = ‘ls -al’
- 作业控制台、前台、后台控制
- 程序脚本
- 通配符
type:bash shell的内置命令,用来查看命令是否为bash的内置命令,感觉然并卵。
2.shell的变量功能
变量的显示与设置:echo、unset
myname=lili 注意=号之间不能有空格
echo $myname 显示变量的值
unset myname 取消这个变量
环境变量(重要):功能有主文件夹的变换,提示符的显示,执行文件查找的路径等。可通过env与export查看,另外,set查看所有的变量,包括环境变量与自定义变量。
HOME–代表用户的主文件夹。
SHELL–目前环境使用的shell程序
HISTSIZE–记录历史命令的条数
MAIL–当我们使用mail这个令在收信时系统会去读取的邮件信箱文件。
PATH–执行文件查找的路径,目录与目录中间以冒号分分隔,文件查找是以PATH的变量内的目录来查询。
LANG–语系数据
RANDOM–随机数的变量
其中PATH变量最为重要,安装java,maven,mysql等需要设置的环境变量,在win下是直接找到计算机->管理->高级->环境变量这个直接找到或者新建就行,mac则有点像linux了,要进入到.bash_profile中将java等的变量加入到PATH中,并且要export PATH才能起作用。
3.命令别名与历史命令:
alias lm=’ls -l | more’
这时,执行lm就相当于执行 ls -al more。
unalias lm
取消别名
history:
n :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
则默认写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
4.bash的操作环境
login 与 non-login shell:
login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;
non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。
一般来说,login shell 其实只会读取这两个配置文件:
/etc/profile:这是系统整体的配置,你最好不要修改这个文件;
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,你要改自己的数据,就写入这里!
在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:
~/.bash_profile
~/.bash_login
~/.profile
配置文件生效需要重启机器,也可用 source+文件名 命令载入。
以上配置文件只列出了几个重要的,还有很多其他的配置文件,用到了查书就行。
5.数据流重定向:数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给他传输到其他的地方
标准输出与标准错误输出:标准输出指的是『命令运行所回传的正确的信息』,而标准错误输出可理解为『 命令运行失败后,所回传的错误信息』。
- 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
- 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
- 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
标准错误输出:
- 1> :以覆盖的方法将『正确的数据』输出到指定的文件或装置上;
- 1>>:以累加的方法将『正确的数据』输出到指定的文件或装置上;
- 2> :以覆盖的方法将『错误的数据』输出到指定的文件或装置上;
- 2>>:以累加的方法将『错误的数据』输出到指定的文件或装置上;
将正确信息与错误信息分别输入到不同文件中:
find /home -name .bashrc > list_right 2> list_error
将正确与错误数据通通写入同一个文件去:
find /home -name .bashrc > list 2>&1
利用 cat 命令来创建一个文件的简单流程:
cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 来离开
cat > catfile << “eof”
This is a test.
OK now stop
eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
用 stdin 取代键盘的输入以创建新文件的简单流程:
cat > catfile < ~/.bashrc
命令运行的判断依据: ; , &&, ||
直接给个鸟哥的例子:
例题:
以 ls 测试 /tmp/vbirding 是否存在,若存在则显示 “exist” ,若不存在,则显示 “not exist”!
答:
这又牵涉到逻辑判断的问题,如果存在就显示某个数据,若不存在就显示其他数据,那我可以这样做:
ls /tmp/vbirding && echo "exist" || echo "not exist"
意思是说,当 ls /tmp/vbirding 运行后,若正确,就运行 echo “exist” ,若有问题,就运行 echo “not exist” !那如果写成如下的状况会出现什么?
ls /tmp/vbirding || echo "not exist" && echo "exist"
这其实是有问题的,为什么呢?由图 5.2.1 的流程介绍我们知道命令是一个一个往后运行, 因此在上面的例子当中,如果 /tmp/vbirding 不存在时,他会进行如下动作:
若 ls /tmp/vbirding 不存在,因此回传一个非为 0 的数值;
接下来经过 || 的判断,发现前一个命令回传非为 0 的数值,因此,程序开始运行 echo “not exist” ,而 echo “not exist” 程序肯定可以运行成功,因此会回传一个 0 值给后面的命令;
经过 && 的判断,咦!是 0 啊!所以就开始运行 echo “exist” 。
所以啊,嘿嘿!第二个例子里面竟然会同时出现 not exist 与 exist 呢!真神奇~
由于命令是一个接着一个去运行的,因此,如果真要使用判断, 那么这个 && 与 || 的顺序就不能搞错。一般来说,假设判断式有三个,也就是:
command1 && command2 || command3
而且顺序通常不会变,因为一般来说, command2 与 command3 会放置肯定可以运行成功的命令, 因此,依据上面例题的逻辑分析,您就会晓得为何要如此放置啰~这很有用的啦!而且…..考试也很常考~