shell里一个let命令,用sh跑不了,但bash可以,发现bin里面sh是dash的链接,那么sh和bash功能上啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell里一个let命令,用sh跑不了,但bash可以,发现bin里面sh是dash的链接,那么sh和bash功能上啥区别相关的知识,希望对你有一定的参考价值。

dash又有什么不同

sh是shell的最小实现,基本都是符合POSIX标准的。
而bash在POSIX标准基础上添加了很多扩展语法和功能。
dash是Ubuntu默认的shell,dash与bash的区别网上一搜就有,我记得有一个区别就是dash不支持数组,而bash支持。可以更改Ubuntu的默认shell为bash的。

如果对可移植性有要求,写脚本还是尽量遵循POSIX标准的语法。虽然bash中有些语法非常方便。
参考技术A 你的sh就是dash,那么你查下dash和bash的区别就行了。其实都差不多的。 参考技术B

要明白,shell只是一个壳子,来解释某些系统命令的。


一般系统内的/bin/sh 都是默认到/bin/bash的。


此外的csh ,ksh

fd@RootMorseSrc:~/c$ which sh
/bin/sh
fd@RootMorseSrc:~/c$ whereis sh
sh: /bin/sh.distrib /bin/sh /usr/share/man/man1/sh.1.gz
fd@RootMorseSrc:~/c$

初步bash

bash及其特性:

shell:外壳(也是一种程序)

GUI:Gnome,KDE,Xfce

CLI:sh,csh,ksh(unix),bash,tcsh,ksh(linux),zsh


sh的特点:

1.每一个用户打开一个shell都是占用不同的进程,尽管是同一个程序

2.sh可以嵌套使用,bash里面可嵌套bash,可用pstree命令查看,子bash和父bash互不影响

3.不同的shell也可以混用如bash-->ksh-->bash-->csh ...



bash的特点:(支持以下功能)

1.命令历史

2.管道、重定向

3.命令别名

4.命令行编辑

5.命令行展开

6.文件名统配

7.变量

8.编程(shell 脚本)

9.命令补全


命令行编辑

光标跳转:

Ctrl+a:跳到命令行行首

ctrl+e:跳到命令行行尾

ctrl+u:删除从光标到行首

ctrl+k:删除从光标到行尾

ctrl+l:清屏

命令历史:

查看命令历史:history

-c:清空命令历史

-d: history -d 4: 删除第4个命令;  history -d 4 1 :删除第4个以及后面1个命令

-w: 保存命令历史至历史文件中去 /home/.bash_history

使用技巧:!+ ‘n‘ 例如:!4: 第四条命令

!+ ‘-n‘   例如:!-4:倒数第四条命令

!!:执行上条命令

!+ string:执行最近一条和 string字符相同的命令如 !man

!$:引用前一个命令最后一个参数 或者 esc . 或者 alt .

命令别名:

alias CMDALIAS=‘COMMAND [option] [argument]‘ alias cls=‘clear‘

在shell中定义的别名仅在当前shell生命周期中有效;别名的范围仅为当前shell进程,如果想永久生效,写入指定文件

alias 可以查看当前系统所有别名

撤销别名:unalias CMDALIAS

如果重命名的别名与原系统中命令重名,想使用原声系统的命令 \CMD 命令前加 ‘\‘即可


命令替换:

方式1:$(CMD) 方式2:反引号:`CMD`

把命令中某个子命令替换成为其执行结果的过程:echo "the current directory is %(pwd) ."

创建一个文件命名为 file-2016-4-5-00-00.txt :touch ./file$(date +%F-%H-%M-%S).txt


bash支持的引号:

``:命令替换

"":弱引用,可以实现变量替换

‘‘:强引用,不完成变量替换


文件名统配:globbing 

*:任意长度的任意字符

?:匹配任意单个字符,占位符

[]:匹配 任意范围内的 单个字字符,例如:[abc],[a-z],[A-Z],[a-zA-Z],

[[:space:] (空白字符集合)],

[[:punct:](标点符号字符集合)],

[[:lower:](小写字母)]

[[:upper:](大写字母)]

[[:alpha:](大小写字母)]

[[:digit:](数字)]

[[:alnum:](数字和大小写字母)

#man 7 glob

要求:找到符合字母开头中间有空格数字结尾的文件: # ls [[:alpha:]]*[[:space:]]*[[:digit:]]

[^]:与上上面的取反,匹配 任意范围之外的 单个字符

[^[:space:]](非空格)

[^[:punct:]](非标点符号)

...


以上是关于shell里一个let命令,用sh跑不了,但bash可以,发现bin里面sh是dash的链接,那么sh和bash功能上啥区别的主要内容,如果未能解决你的问题,请参考以下文章

C语言能否用在shell脚本

source命令

Shell 脚本介绍

linux下如何让脚本里面的几条命令重复执行

用shell命令对文件重命名

初步bash