经典的 Shell 十三问

↓推荐关注↓
1. 为何叫做shell?
我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件,硬件的驱动只能通过一种称为“ 操作系统 ( OS , Opertating System )的软件来管控 。linux 严格来说只是一个 操作系统 ( OS ),我们称之为 内核 ( kernel ) 。
使用者没有办法直接操作一个 kernel ,而是通过 kernel 的“外壳”程序,也就是所谓的 shell ,来与 kernel 沟通 。shell 是一个使用者与系统的 交互界面(interface) , 只能让使用者通过 命令行 ( command line )来使用系统来完成工作 。
因此 , shell最简单的定义就是——命令解译器(Command Interpreter):
将使用者的命令翻译给核心处理;
同时,将核心处理结果翻译给使用者 。
不同的 OS 使用不同的 kernel ; 同一个 kernel 之上,也可以使用不同的 shell 常见的 shell 有 sh; bash; csh; ksh; 等
2. Shell prompt(PS1)与Carriage Return(CR)的关系?
成功登录一个shell终端后,游标 cursor 左边部分,称之为提示符 prompt 通常一般用户使用 $ ,管理员用户 root 使用 #
shell prompt:可以输入命令了 键入命令后,直到读进 CR(Carriage Return) 字符为止
Carriage Return:可以执行命令了
若从技术的细节来看,shell会依据IFS(Internal Field Seperator) 将command line所输入的文字拆解为"字段"(word/field) 。然后再针对特殊字符(meta)先作处理,最后重组整行command line 。
3. 别人echo, 你也echo, 是问echo知多少?
echo 将 argument 送到 标准输出(stdout) ,通常显示在屏幕
stdin 标准输入
stdout 标准输出
【经典的 Shell 十三问】stderr 标准错误输出
echo -n # 取消换行符
echo -e # 启用反斜杠转译 4. ""(双引号)与''(单引号)有什么区别?
hard quote: '' (单引号),关闭所有引用
soft quote: "" (双引号),保留 $ 引用
5. var=value? export前后差在哪?
变量定义: name=value ,等号左右两边不能使用分隔符 。
变量替换: echo ${name} export变量: export name=value ,使变量成为环境变量
# 本地变量
A=B
# 取消变量
unset A
# 环境变量
export A=B 6. exec跟source差在哪?
环境变量只能从父进程到子进程单向传递 。换句话说:在子进程中环境如何变更,均不会影响父进程的环境 。
当我们执行一个shell 时,其实是先产生一个sub-shell的子进程, 然后sub-shell再去产生命令行的子进程 。
# 创建子shell执行脚本
./1.sh
# 当前shell执行
source 1.sh
# 当前shell执行后退出
exec 1.sh 7. ( ) 与 { } 差在哪?
( ) 将 command group 置于 sub-shell 执行 { } 则是在同一个 shell 内完成
8. 与 还有 ${} 差在哪?
$ 与 ``(反引号) 都是用来做命令替换用的 。
${var} 与 $var 都是用来做变量替换用的 。
# 假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
# 我们可以用 ${ } 分别替换获得不同的值:
# 1. shell字符串的非贪婪(最小匹配)左删除
${file#*/} # 拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file#*.} #拿掉第一个 . 及其左边的字符串:file.txt
# 2. shell字符串的贪婪(最大匹配)左删除
${file##*/} # 拿掉最后一条 / 及其左边的字符串:my.file.txt
${file##*.} # 拿掉最后一个 . 及其左边的字符串:txt
# 3. shell字符串的非贪婪(最小匹配)右删除:
${file%/*} # 拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%.*} # 拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
# 4. shell字符串的贪婪(最大匹配)右删除:
${file%%/*} # 拿掉第一条 / 及其右边的字符串:(空值)


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: