Shell是什么?
Linux系统可以通过在Shell(壳)中输入指令与操作系统内核(Kernel)进行沟通,Kernel可以控制硬件使之按照指令进行工作。所以,shell是为用户提供的操作界面,可以输入指令的软件。
shell有很多种类:sh(Bourne SHell)、bash(Bourne Again SHell ,简称 bash,和sh相容,是sh的加强版)、csh、tcsh、ksh、zsh等。
在/etc/shells 这个文件中可以看到系统中有多少shell可以用。
Bash Shell的功能
1、记忆功能:
可以使用“上下键”来执行前/后一个输入的指令。~/.bash_history 记录的是前一次登陆以前所执行过的指令,而至于这一次登陆所执行的指令都被暂存在内存中,当你成功的登出系统后,该指令记忆才会记录到 .bash_history 当中!
2、补全功能:
- [Tab] 接在一串指令的第一个字的后面,则为命令补全;
- [Tab] 接在一串指令的第二个字以后时,则为文件补齐。
- 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行“选项/参数的补齐”功能!
要知道环境当中所有以 c 为开头的指令呢?就按下“ c[tab][tab] ”。
3、设置命令别名功能:
如输入 alias lm='ls -al' 可以 lm 来代替 ls -al 。想知道有多少别名,输入 alias 即可。
4、工作控制、前景背景控制功能: (job control, foreground, background)
例如可以通过工作控制(jobs)让我们随时将工作丢到背景中执行,不怕不小心使用了 [Ctrl] + c 来停掉该程序。
5、程序化脚本:(shell scripts)
可以将一堆指令写在一起,类似于批处理文件。
6、万用字符
除了完整的字串之外, bash 还支持许多的万用字符来帮助使用者查询与指令下达。
例如,要知道 /usr/bin 下面有多少以 X 为开头的文件?使用命令 ls -l /usr/bin/X* 。
Type命令
很多指令是bash内置的,那么如何区分内置指令、外部指令、别名的命令?type。
如:type cd
type [-tpa] name
选项与参数:
:不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内置指令
-t :当加入 -t 参数时,type 会将 name 以下面这些字眼显示出他的意义:
file :表示为外部指令;
alias :表示该指令为命令别名所设置的名称;
builtin :表示该指令为 bash 内置的指令功能;
-p :如果后面接的 name 为外部指令时,才会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias
变量
1、环境变量:
系统需要一些变量来提供他数据的存取 (或者是一些环境的设置参数值, 例如是否要显示彩色等等的) ,所以就有一些所谓的“环境变量” 需要来读入系统中。这些环境变量例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的, 为了区别与自订变量的不同,环境变量通常以大写字符来表示。
例如:能否在任何目录下执行某个指令,与 PATH 这个变量有很大的关系。下达 ls 这个指令时,系统就是通过 PATH 这个变量里面的内容所记录的路径顺序来搜寻指令的,如果在搜寻完 PATH 变量内的路径还找不到 ls 这个指令时, 就会在屏幕上显示“ command not found ”的错误讯息了。
使用指令 env 可以列出所有的环境变量。
2、取用变量:
echo $variable 或者 echo ${variable} 。如 echo $PATH 或者 echo ${PATH} 。
3、设置变量规则:
- 变量与变量内容以一个等号“=”来链接,如下所示: myname=VBird
- 等号两边不能直接接空白字符,如下所示为错误: myname = VBird 或 myname=VBird Tsai
- 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 2myname=VBird
- 变量内容若有空白字符可使用双引号“"”或单引号“'”将变量内容结合起来,但
- 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示: var="lang is $LANG",则 echo $var 可得“lang is zh_CN.UTF-8”
- 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示: var='lang is $LANG',则 echo $var 可得“lang is $LANG”
- 可用跳脱字符“ \ ”将特殊符号(如 [Enter], $, \, 空白字符, '等)变成一般字符,如: myname=VBird\ Tsai
- 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引号“指令”或 “$(指令)”。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!
例如想要取得核心版本的设置: version=$(uname -r) 再 echo $version 可得“3.10.0-229.el7.x86_64”
或者:version=`uname -r` 再 echo $version 可得“3.10.0-229.el7.x86_64”
- 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示: PATH="$PATH":/home/bin 或 PATH=${PATH}:/home/bin
- 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量: export PATH
- 通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
- 取消变量的方法为使用 unset :“unset 变量名称”。例如取消 myname 的设置: unset myname
变量易混点总结
单引号:里面的内容为一般字符,纯文本,所见即所得。
双引号:特殊字符可以保持原有的特性,变量会被替换成变量值。
反单引号:`指令` 会执行指令并保存指令执行结果。
$(指令):同上述 反单引号中间使用指令的用法。
$变量名:取用变量。
${变量名}:同上述 $变量名 的用法。
参考文献:鸟哥的Linux私房菜:基础学习篇 第四版
1294

被折叠的 条评论
为什么被折叠?



