认识与学习bash
认识与学习bash
认识bash这个shell
- 硬件,内核与shell
- 硬件:整个系统中的实体工作者,包含硬盘,显卡,网络卡,cpu等。
- 内核:真正控制硬盘工作的,有cpu进程,内存管理,磁盘输入输出等工作。
- shell:狭义的shell只命令行方面的软件;广义的是指只要能够操作应用程序接口的都叫做shell,本文讲的是命令行界面的shell(bash)。
- bash shell的功能
- 命令记忆功能:(history)
- 命令补全功能 :(tab)键
- 命令别名设置功能:(alias)
- 作业控制,前台,后台控制
- 程序脚本:shell script
- bash shell的内置命令查询:type
shell的变量功能
- 什么是变量:以一组文字或符号等,来代替比较复杂或者容易变动的数据。
- 变量的显示:echo 例如:echo $PATH
- 变量的设置规则:
- 变量名只能是英文字母与数字,但不能以数字开头
- 变量名与变量内容之间用=号连接,不能直接接空格字符
- 变量内容若有空格符,可使用单引号或双引号,注意单引号不解析变量,原样输出
- 可使用转义字符“\”转义特殊字符
- 该变量增加变量内容时,例如:PATH="$PATH":/home/zj
- 若该变量需要在其它子进程执行,则需要以export来使变量变成环境变量,例如:export PATH
- 取消变量:unset 变量名
- 环境变量的功能
- 查看环境变量:env
- 自定义变量转成环境变量:export
- 子进程仅会继承父进程的环境变量,不会继承父进程的自定义变量
- 变量键盘读取,数组与声明:read,array,decla
- 变量内容的删除,替代与替换:
从前面开始删除:
- #:删除最短的 例如:echo ${path#/:} 把path中/到:最短的删除,号为通配符
- ##:删除最长的 例如:echo ${path##/:} 把path中/到:最长的删除,号为通配符,即前面的目录都删除了,仅保留最后一个目录。
从后面开始删除:
- %:删除最短的 例如:echo ${path%/:} 把path中/到:最短的删除,号为通配符
- %%:删除最长的 例如:echo ${path%%/:} 把path中/到:最长的删除,号为通配符
变量的替换:
例如:把path变量中的sbin替换为大写的SBIN
echo ${path/sbin/SBIN} 只替换第一个
echo ${path//sbin/SBIN} 替换所有
- 命令别名与历史命令:alias , unalias,history
bash shell的操作环境
- 路径与命令的查找顺序
- 以相对绝对路径执行命令
- 由alias找到命令来执行
- 由bash的内置命令来执行
- 通过$PATH这个变量的顺序找到的第一个命令来执行
- bash的环境配置文件
- loginshell 取得bash时需要完整的登入流程,需要用户输入登入账号与密码:系统整体设置文件/etc/profile与~/.bash_profile
- non-login shell 取得bash的接口方法不需要重复登入,以图形界面启动终端机,并不需要再次输入账号与密码:~/.bashrc
数据流重定向
- 标准输入(stdin):代码为0,使用<或<<
- 标准输出(stdout):代码为1,使用>或>>
- 标准错误输出(stderr):代码为2 ,使用2>或2>>
- 命令执行的判断依据:;,&&,,||
管道命令
- 选取命令:cut,grep
- 排序命令:sort,wc,uniq
- 双向重定向:tee
- 字符转换命令:tr,col,join,paste,expand
- 参数代换:xargs
- 关于减号-的用途:某些命令需要用到文件名来进行处理时,该stdin与stdout可以利用减号来代替
tar -cvf - /home | tar -xvf -
将home里面的文件打包经管道传送给后面的tar -xvf -