在 BBS上看到了Shell十三问的帖子,由于比较就远了,怕以后再也找不到了,就把笔记贴过来了,

原帖地址:

shell 十三问
http://bbs.chinaunix.net/thread-2033675-1-1.html

贴出我做的笔记:

<一>、为何叫做shell
使用者通过shell(操作系统即核心kernel的外壳)与kernel沟通,这是shell与kernel的命名的关系。
从技术角度讲,shell的最简单定义是——命令解译器( Command Interpreter )
/etc/shells 中存放着系统预装的好几种shell
大部分的linux 系统的预设 shell 都是 bash,原因:
*自由软件
*功能强大
<二>、shell prompt(PS1) 与 Carriage Return(CR)的关系?
$: 给一般使用者账号使用
#: 给 root(管理员)账号使用
shell prompt 的意思很简单:
是 shell 告诉使用者:您现在可以输入命令行了,使用者只有在得到 shell prompt 才能打开命令行,而 cursor(光标) 是指示键盘
在命令行所输入的位置,使用者每输入一个键,cursor 便往后移动一格,直到碰到命令行读进Carriage Return 字符为止。
Carriage Return 的意思也很简单:
是使用者告诉 shell:老兄你可以执行我的命令行了。
不同的命令可接受的命令行格式或有不同,一般情况下,一个标准的命令行格式为:
command-name options argument
若从技术细节来看,shell 会根据 IFS(Internal Field Seperator)将 command line 所输入的文字给拆解为“字段”
然后再针对特殊字符(meta)先作处理,最后在重组整行 command line. (注意:请务必理解上面两句话的意思,我们日后 的 学习中会经常回到这里思考。)
每一个命令行均必须含有命令名称,这是不能缺少的。
<三>、 别人 echo、你也 echo, 是问 echo 知多少?
承接上面所介绍的 command line, 这里我们用 echo 这个命令加以进一步说明,标准的 command line 饱含三个部件:command_name option argument
echo -e "a\t"       -e选项是打开反斜杠控制字符
<四>、 ""(双引号)与''(单引号)差在哪?
hard quote: '' 单引号,凡在hard quote 中的所有系统保留关键字meta 均被关闭。
soft quote: "" 双引号,在soft quote中大部分的meta 都会被关闭,蛋某些则被保留(如 $)
escape: \ 反斜线,只有进阶在 escape(跳脱字符)之后的单一 meta才被关闭。
<五>、 var=value? export 前后差在哪?
所谓的环境变量就是那些会传递给子行程的变量
遗传性 是区分本地变量与环境变量的决定性指标
var=value 赋值只是给局部变量赋值
export var=value 则是给环境变量赋值
unset var   对var变量取消,与对其赋值为NULL 是不一样的 
<六>、exec 跟 source 差在哪?
了解 父进程(parent process) 和子进程(child process)的区别,父进程产生子进程,子进程结束后将返回到父进程去,子进程继承父进程的环境变量。
命令脚本(shell script):就是将平时在 shell prompt 后所输入的多行 command line 依序写入一个文件中去而已。
其中再加上一些条件判断、互动界面、参数运用、函数调用、等等技巧,得以让 script 更加聪明的执行、。
结合上面两个概念(process + script),便不难理解下面这句话的意思了
正常来说,当我们执行一个 shell script 时,其实是先产生一个 sub-shell 的子进程,然后sub-shell 再去产生命令行的子进程。
一般我们跑的 shell script 是用 sub-shell去执行的。当用 subshell 来跑 script 的话吗sub shell 的workding dir($PWD) 会因为 cd 而变更,
但当返回 primary shell 时,$PWD 是不会变更的。
source
所谓 source 就是让script 在当前 shell 内执行、而不是产生一个 sub-shell来执行。
因此,只要我们将原本单独输入的script 命令行变成 source 命令的参数,就可以轻易解决上面提到的问题啦
./my.sh
可以变为
source ./my.sh  或 ../my.script
exec 也是让 script 在同一个进程上执行,但是原有进程则被结束了。这就是 exec 与 source/fork 的最大差异了
<七>、 ()与 {} 差在哪?
命令群组(command group):将多个命令集中处理。。
()将 command group 置于 sub-shell来执行,也称 nested sub-shell
{} 则是在同一个 shell 内完成,也称 non-named command group
function 就是用一个名字去命名一个command group,然后再调用这个名字去执行 command group.
<八>、 $(()) 与 $() 还有 ${} 差在哪?
$() 与 ``(反引号)都用来做命令替换用的。
所谓的命令替换与我们学过的变量替换差不多,都是用来重组命令行:完成引号里的命令行,然后将其结果替换出来,再重组命令行。
<九>、$@ 与 $* 差在哪?
$@ 与 $* 在一般时都可以获得函数的所有参数
但是,当 $@ 与 $* 处在 hard quote即 ""中时,表现出的区别是:
$@  会将所有的参数挨个返回
$*  会将所有的参数拼成一个字符串返回
$#  可以返回参数的总数 (不包括 $0,即路径)
${10}  通过${}可以获得超过10的参数,否则会将$1拼接0返回
<10>、 && 与 || 差在哪?
A=123
[ "$A" = 100 ] 可以用来判断A 是否等于100
上面的格式会返回一个返回值,若返回值为 0则代表判断正确,返回值为 1代表判断错误
每个命令执行完之后均由一个返回值,跟上面的含义相同
[ "$A" = 100 ] && echo "yes,\$A is 100"    意思是 && 前面的返回值为 ture时 执行后面
[ "$A" = 100 ] || echo "no,\$A is not 100"  意思是 || 前面的返回值为 false时 执行后面
一行命令中可以有多个 &&  与 || 嵌套使用,如 [ "$A" = 100 ] || echo "no" && ls -G  && echo "yes" 
<11>、 、、、、原帖子被丢了。。。。。
<11.1>、stdin 与 stdout
<11.2>、 stderr  及如何改变File Descriptor 的预设数据通道
<12>、 你要 if 还是 case 呢
if:
# if [[ "$A" = 123 ]]; then
#  echo "oh,Yes"
# elif [[ "$A" < 123 ]]; then
#  echo "oh , \$A > 123"
# else
#  echo "what"
# fi
case:
# case "$1" in
#  start )
#  echo "what is start";;
#  stop )
#  echo "hei,that is stop";;
#  ok )
#  echo "en , en A";;
# esac
<13>、 for what? while 与 until 差在哪?
....

转载于:https://www.cnblogs.com/cg-Yun/p/4139509.html

Shell 十三问 的学习记录相关推荐

  1. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据shell脚本个人学习复习记录—PART-03

    shell脚本个人学习&复习记录--PATR-01 shell脚本个人学习&复习记录--PATR-02 Shell的函数 function可以不用写 ()中不能放任何东西#定义函数-- ...

  2. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据shell脚本个人学习复习记录—PART-02

    shell脚本个人学习&复习记录PART-01:CSDN 7.shell的流程控制语句 if语句 数字判断 -eq:等于 -ne:不等于 -gt:大于 -lt:小于 -ge:大于等于 -le: ...

  3. shell编程学习记录

    shell学习记录(持续更新中--) 创建shell脚本文件 与用户交互-echo 输入输出重定向 输出重定向 输入重定向 内联输入重定向 shell中变量的定义和使用 管道符 | 脚本中的数学运算 ...

  4. Linux+shell学习记录和思维导图

    由于shell和Linux学习分不开,所以干脆一起结合起来学习,顺便用思维导图工具做一个记录. 学习的关键在于对着教程敲代码. 学习工具 思维导图工具Xmind:以前一直用百度脑图做一些简单的记录,但 ...

  5. shell十三问之16:学习总结与原帖目录

    本人(markdown译者)是解决工作中shell脚本的一个问题, 偶尔的一次机会遇到了CU论坛中这样一个神贴:**shell十三问**. shell十三问是CU的shell版的台湾的**网中人**是 ...

  6. shell十三问--shell教程

    为什么80%的码农都做不了架构师?>>>    13_questions_of_shell shell十三问--shell教程(markdown 版本) ##shell十三问之1: ...

  7. (一)Git学习记录(不断更新)

    作为程序员如果你还不知道 Git 和 GitHub,说不过去吧,赶紧来学习一波. 一.认识GitHub Git 是个版本控制系统,说明白点就是进行代码的各种管理,比如你写错代码进行回滚啊.追寻 Bug ...

  8. MongoDB学习记录:入门(一)——五叶草

    预热看我之前的文章Node学习记录: mongodb 这个系列旨在系统的学习Mongodb 部分图片来自慕课网mongodb入门截图 学习目标 MongoDB官网:https://www.mongod ...

  9. shell十三问(转)

    这个我记得是在chinaunix论坛上最早出现的帖子. Shell 十三问 作者:www.chinaunix.net之網中人 1) 为何叫做 shell ? 在介绍 shell 是甚么东西之前,不妨让 ...

最新文章

  1. Java 对象初始化的过程介绍
  2. android kotlin面试题,Kotlin面试25题
  3. 互联网1分钟 |1228
  4. webpack自定义打包命令
  5. 如何查看数据库是否是rac,如何查看数据库是否是单实例
  6. pandas loc, iloc, ix, at, iat用法
  7. QT语言开发的软件界面UI自动化方法
  8. 薪酬体系怎么设计?看看这家把薪酬公开的公司怎么说
  9. linux大容量硬盘 克隆到小硬盘_clonezilla 不管用了,手动把 GPT 分区的 ubuntu14.04 操作系统从大硬盘克隆到小硬盘...
  10. T410i开机显示fan error修复
  11. 互动派年会-comsol专题超强干货剖析
  12. 数学符号发音及英文表达
  13. 新手蓝牙耳机选购攻略,2021什么牌子蓝牙耳机不容易踩雷
  14. Android:修改电池容量
  15. Linux系统NAT实现机制的升级改进
  16. 交换机的转发原理 |VLAN详解·图解 |VLAN间通信 |华为,思科配置
  17. winrar5.9-64位最新版
  18. 有源天线:请教个GPS模块接天线的问题,阿莫论坛同轴供电接收GPS二合一,自己总结的TG621K,TG621S和S1216
  19. 用XShell上传文件
  20. 金盾软防CC防护方法设置

热门文章

  1. 怎么锁定电脑屏幕_和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有...
  2. 顺时针打印二维数组C语言递归,按顺时针打印矩阵
  3. python excel web_使用python在WEB页面上生成EXCEL文件
  4. php复选框关联数据库字段,通过php将复选框中的多个值插入数据库
  5. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?
  6. 【HTML】兴唐第二十八节课之初识HTML
  7. React 循环渲染 5
  8. js把for循环出来的数据存入数组
  9. Day03 - Ruby比一比:Module的include与extend
  10. 五款漂亮的 GNOME 3.4 主题-PPA