第10章:认识与学习bash

一、硬件、核心、Shell

操作系统是一组软件,控制整个硬件与管理系统的活动检测。操作系统不能被用户随意操作,若使用不当,则会造成系统崩溃。但是我们总是需要让用户操作系统的,所以就有了应用程序。用户通过应用程序来指挥核心,让核心达成我们所需要的硬件任务。所以应用程序(shell)如同鸡蛋(kernel)的外壳一样。

  • 壳程序的功能只是提供用户操作系统的一个接口,狭义:指令列方面的软件,比如bash;广义:图形接口的软件

二、为何要学文字接口的shell

shell作为应用程序,就有很多版本,/etc/shells文件是可以使用的shells
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E1Rd2Rfi-1582378802868)(https://user-images.githubusercontent.com/56629574/67351116-417eee00-f57f-11e9-8a5a-b00c6ace12eb.png)]
使用者预设的shell是/etc/passwd中的
1571797982(1)

三、变量

1. 变量的用法

  • 变量的取用:echo $variable
  • 变量的设定:变量名=变量值
  • 取消变量:unset 变量名
  • 在bash环境下,未定义的变量名,echo 显示为空

应用: 比如经常去一个目录工作,/a/b/c/d/
则可以work="/a/b/c/d"
则每次进入工作则用 cd $work
2. 变量查看

  • 查看环境变量:env
  • 查看环境变量和自定义变量:set
  • 自定义变量转换为环境变量:export 变量名
  • 环境变量转换为自定义变量:declare -x 变量名
    为什么要将自定义变量转换为环境变量呢?
    1574047211(1)
    因为bash是shell(应用程序接口)的一种,在此bash下达的指令都是此bash衍生的,也就是子程序。若执行子bash,则环境接口就是子bash的环境,原bash暂停。若想回到父程序,则要将第二个bash结束掉(下达exit或logout)
    子程序仅会继承父程序的环境变量,子程序不会继承父程序的自定义变量,所以在原bash下的
    自定义变量在子bash下会消失,一直道离开子程序回到父程序,这些自定义变量才会出现。

3. 变量键盘读取、数组与宣告
在2中可以用预设的方式设置变量,也可以用键盘读取的方式来设置变量

  • 键盘读取:read [-pt] 变量名
    变量默认是字符串类型,若想要其他类型(比如数组、数值),则要变量宣告
  • 宣告变量类型:declare [-aixr] 变量名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GhmyfWjv-1582378802875)(https://user-images.githubusercontent.com/56629574/69023567-2d050880-09fa-11ea-88ee-047062981e66.png)]

4. 变量内容的删除、取代与替换

四、命令别名与历史命令

1. 命令别名设定:alias、unalias
alias lm=‘ls -al | more’
好处:①简化命令长度 ②防止误删操作 比如alias rm='rm -i’则可以在每次删除时,都提示是否要删除,而不是直接就删除文件。

命令别名与变量区别:命令别名是命令,可以直接使用;变量需要用echo
2. 命令搜寻顺序

  • 以相对/绝对路径执行命令
  • 由alias找到该命令来执行
  • 由bash内建的(builtin)指令来执行
  • 透过$PATH这个变量的顺序搜寻到的第一个指令来执行
    在这里插入图片描述
    所以有了ls与/bin/ls执行结果不同的情况

五、数据流重定向

将原本命令执行后输出在屏幕上内容,输出到文件或者装置中
**1. 标准输出:**代码为0 >或者>> 区别:>会覆盖掉原文件内容
将原本输出在屏幕的,输出到文件中
比如:ls >> a.txt
2. 标准错误输出: 代码为1,>或者>>

3. 标准输入: <或<< <<是指定键盘输入终止符
将原本在键盘输入的,由文件输入(必须是文件)
cat > b.txt < a.txt
键盘输入:
1574064087(1)
4. 命令执行的判断依据:;&& ||

  • 不考虑命令相关性cmd;cmd(不管命令是否执行成功)
  • 考虑命令相关性&&:前面正确执行,后面才会执行
  • 考虑命令相关性||:短路原理 前执行成功,后不会执行;前错误,后才执行
    举例:以ls 测试/a/b是否存在,若存在则显示“exist”;若不存在,则显示“not exist”
    1574065483(1)

六、管道命令(pipe)

管道与上述五.4不同 管道是前一个命令的输出是下一个命令的输入;五.4命令间是不存在相互影响的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvMT4Pqz-1582378802881)(https://user-images.githubusercontent.com/56629574/69036922-c562b380-0a21-11ea-8c30-38fafae76a91.png)]

发布了550 篇原创文章 · 获赞 88 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/104451213
今日推荐