一、硬件、核心、Shell
操作系统是一组软件,控制整个硬件与管理系统的活动检测。操作系统不能被用户随意操作,若使用不当,则会造成系统崩溃。但是我们总是需要让用户操作系统的,所以就有了应用程序。用户通过应用程序来指挥核心,让核心达成我们所需要的硬件任务。所以应用程序(shell)如同鸡蛋(kernel)的外壳一样。
- 壳程序的功能只是提供用户操作系统的一个接口,狭义:指令列方面的软件,比如bash;广义:图形接口的软件
二、为何要学文字接口的shell
shell作为应用程序,就有很多版本,/etc/shells文件是可以使用的shells
使用者预设的shell是/etc/passwd中的
三、变量
1. 变量的用法
- 变量的取用:echo $variable
- 变量的设定:变量名=变量值
- 取消变量:unset 变量名
- 在bash环境下,未定义的变量名,echo 显示为空
应用: 比如经常去一个目录工作,/a/b/c/d/
则可以work=”/a/b/c/d”
则每次进入工作则用 cd $work
2. 变量查看
- 查看环境变量:env
- 查看环境变量和自定义变量:set
- 自定义变量转换为环境变量:export 变量名
- 环境变量转换为自定义变量:declare -x 变量名
为什么要将自定义变量转换为环境变量呢?
因为bash是shell(应用程序接口)的一种,在此bash下达的指令都是此bash衍生的,也就是子程序。若执行子bash,则环境接口就是子bash的环境,原bash暂停。若想回到父程序,则要将第二个bash结束掉(下达exit或logout)
子程序仅会继承父程序的环境变量,子程序不会继承父程序的自定义变量,所以在原bash下的
自定义变量在子bash下会消失,一直道离开子程序回到父程序,这些自定义变量才会出现。
3. 变量键盘读取、数组与宣告
在2中可以用预设的方式设置变量,也可以用键盘读取的方式来设置变量
- 键盘读取:read [-pt] 变量名
变量默认是字符串类型,若想要其他类型(比如数组、数值),则要变量宣告 - 宣告变量类型:declare [-aixr] 变量名
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
键盘输入:
4. 命令执行的判断依据:;&& ||