linux鸟哥私房菜学习笔记--第11章

来源:互联网 发布:听喊麦用什么软件好 编辑:程序博客网 时间:2024/05/09 06:27

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 会放置肯定可以运行成功的命令, 因此,依据上面例题的逻辑分析,您就会晓得为何要如此放置啰~这很有用的啦!而且…..考试也很常考~

0 0