1.bash shell基础概念
目录
2.3.5 变量键盘读取,数组与宣告 : read,array,declare
1.1 硬件,核心与shell
shell将我们输入的指令与Kernel沟通,Kernel来控制硬件正确工作.
用户通过应用程序来指挥核心,让核心达成我们所需要的硬件任务.应用程序在最外层,因此也叫壳程序(shell).
壳程序只提供给用户操作接口,因此壳程序需要呼叫其他软件.通过壳程序操作其他应用程序(如指令:man,chomd,mkfs),以呼叫核心来运作所需的工作.也就是能操作应用程序的接口都是壳程序.狭义的壳程序是指指令列方面的软件,如bash.广义的壳程序则包括图形接口的软件.
1.2 bash的功能
bash是Linux的预设shell,是GUN计划中的重要工具.它的主要优点:
- 命令编修能力
下达的所有命令都会记录在家目录的.bash_history中,默认可以记录1000个. - 命令补全功能
[tab]接在一串指令第一个字符后边,则为命令补全
[tab]接在一串指令第二个及以后字符后边,则为目录/文件补全 - 命令别名设定
alias xx = 'xxxxxx' - 工作控制,前景背景控制
- 程序化脚本
- 通配符
1.3 查询命令是否是bash的内建命令 : type
type 搜寻的是执行挡,而不是一般文件.
1.4 快速编辑按钮
2 shell的变量功能
变量是用一个简单的数据代表一个复杂的或可变的数据
2.1 变量的取用:echo,及变量的设定
echo $XXX 或 echo ${XXX}
变量的设定用[=]连接.如 a=123456 变量a的值设置成123456.当一个变量名称没有被设定的时候,预设的内容时空
2.2 变量的设定规则
- 变量与变量内容以一个[=]连接 如 a=123456
- 等号两边不能直接接空格 错误示例 a = 123456 或 a=123 456
- 变量名称只能是英文或数字,但不能以数字开头
- 变量内容如果有空格符,可以用['']或[" "]将变量内容连接起来,但
双引号内的特殊字符可以保有原有的特性
单引号内的特殊字符一律按一般字符(纯文本)处理 - 可用逃脱符[\]将特殊字符变为一般字符(如[Enter],$,\,空格符,'')
- 在一串指令执行中,还需要籍由其他额外的指令所提供信息时,可以使用反单引号[`指令`]或$(指令)
- 若该变量是扩增变量内容时,则可用"$变量名称"或${变量}累加内容,如PATH=${PATH}:/home/bin
- 若该变量需要其他子程序执行,则可用export来使变量编程环境变量
- 取消变量的方法 unset
2.3 环境变量的功能
2.3.1 查询默认的环境变量 env,export
env 是 environment的缩写,执行 env命令:
执行export也能达到一样的效果,上边列出来的环境变量的功能如下:
- HOME 代表家目录.
- SHELL 环境使用的shell是哪一支,预设是 /bin/shell
- HISTSIZE 下达过的命令记录笔数
- MAIL 信箱文件地址
- PATH 执行文件搜寻路径,目录间用[:]隔开,按序搜寻
- LANG 语系
- RANDOM 随机数变量
2.3.2 用set观察所有变量(包括自定义变量)
比较重要的变量:
PS1:(提示字符的设定)
命令提示符,当执行某个命令后,最后再出现提示字符时,就会主动读取这个变量值了.PS1相关符号及意义
$:关于本shell的pid
目前shell的线程代号,即pid.[echo $$]观察pid
?:上个指令的回传值
上一个指令的执行回传值,如果指令执行正确回传[0],否则回传错误代码
2.3.3 export自定义变量转成环境变量
自定义变量与环境变量的差异就是,是否能被子程序引用,环境变量可以被子程序引用.用法:
export 变量名
2.3.4 影响显示结果的语系变量locale
可以逐一设定每个语系有关的变量.但实际上其他语系没有设定,只设定了LANG(主语言环境)和LC_ALL(整体语系环境),则其他语系变量就会
被这两个变量所取代.
指令locale 的 -a 选项可列出所有语系
2.3.5 变量键盘读取,数组与宣告 : read,array,declare
read
利用键盘设置变量
declare/typeset
两个指令有一样的功能:宣告变量的类型.declare指令不接选项会将所有变量叫出来相当于set:
默认情况下,bash对变量有基本定义:
- 变量类型默认字符串
- 数值运算仅能达到整数形态,如1/3结果是0
数组变量类型(array)
数组的设定方式:
var[index]=content
var->数组名,index->元素序号,content->内容
2.3.6 与文件系统及程序的限制关系 : ulimit
用于限制用的某些系统资源
2.4 变量内容的删除,取代与替换(Optional)
鸟哥的几个例子
- #:符合取代文字的最短的那一个
- ##:符合取代文字的最长的那一个
- 都是从前向后
%与%%功能与#和##意义和功能类似,只是#和##是从后向前删除
变量替换用[/]和[//]
变量内容替换
3 历史命令与别名
3.1 别名
别名的定义规则与变量的定义规则几乎相同,alias:
alias aa='cd /home'
定义别名还可以取代既有的指令,像rm指令会默认带上 -i 选项.
取消别名用 unalias:
unalias aa
3.2 历史命令:history