shell与linux
shell 是一个命令语言解释器(command-language interpreter)。是用户和Linux内核之间的接口程序。
拥有自己内建的 shell 命令集。我们在提示符下输入的每个命令【包含shell的内建命令和linux命令】都由shell先解释然后传给Linux内核。
shell也能被系统中其他有效的Linux 实用程序和应用程序所调用。
shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls rm,然后shell试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
sh和bash
sh【Bourne shell,其中Bourne是该软件的owner】、bash【Bourne Again shell,是sh的扩展,并对sh完全向后兼容】是具体的shell程序。想了解当前shell使用的是哪个程序可以在命令行中输入echo $SHELL。
想了解当前shell支持的内建命令集,可以在命令行中输入help了解:
可以通过help+命令名了解具体的命令功能,比如help source
bash是linux中的一个应用程序,所以用man bash的方式了解更多bash的信息,比如bash中的变量。
sh示例
有些板卡环境使用的是sh
而对应的服务器使用的是bash
在host上编写的脚本在device侧就无法正常使用了:
for i in {1..5}
do
echo "time $i"
done
这在host端可以正常运行:注意不是通过sh执行,而是通过./执行的。
在device侧运行就会报错:
line 1: syntax error: bad for loop variable
因为sh中只有字符串变量类型。