shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言

    前面我们已经使用过各种各样的命令,那么命令到底是什么呢?我们又该怎么理解该术语?

什么是命令?

    命令是command的中文翻译,能在命令行中执行的是命令。因为早期的计算机只有文字界面,命令是程序,输入命令就可以操作计算机,所以就将执行的程序称为命令了。下面就是只有文件界面的计算机!

哪些被称为命令?

1、二进制程序(可执行文件)

比如c++程序、shell程序、python程序等等,只要是可执行文件,一般都可称为命令了,还有就是二进制程序,一般是c语言、c++写的程序,比如cp、rm、rmdir

2、内置shell命令

比如cd、source、type

3、别名

比如ll,它是ls -l的别名

4、shell函数

你编写的shell函数,每个函数,也成为一个命令
 

怎么确定某个命令是什么类型的呢?

上面提到,有4种不同种类的命令,那我是怎么知道某个命令为内置命令,还是二进制程序呢?这时候我们就需要使用两个重要的命令type、which

1、type

2、which

type命令用于查看某个命令的类型,会有一个明显输出,比如我们查看type cp,告知你cp是/usr/bin/cp,这个二进制程序

$ type cp
cp is /usr/bin/cp

 再比如我们type cd,表示cd是shell中的内置命令

$ type cd
cd is a shell builtin

which,也是类似的,它会告知你,你调用的命令,到底是哪个路径下的命令,比如type python,它会将python的完整路径告诉你,我们经常使用which来确定实际调用的哪个命令

$ type python
python is /c/Users/cadi2/AppData/Local/Microsoft/WindowsApps/python

 

运行命令的6种方式

1、 xxx.sh

在PATH环境变量中记录的所有目录中,可以找到对应的可执行文件xxx.sh,这里使用的是echo命令,后续我会马上PATH环境变量

$ echo hello world
hello world

2、./xxx.sh

在当前工作目录下查找可执行文件,xxx.sh,此时必须确保程序在当前工作目录下,此时的文件必须得有可执行权限,chmod +x 文件,即可为文件添加可执行权限(备注:不熟悉ls命令的同学,建议去熟悉一下,这里关乎到可执行权限的概念)

3、bash ./xxx.sh

同样在当前目录下查找文件,xxx.sh,此时文件没有可执行权限也可以运行

4、bash xxx.sh

默认也是在当前工作目录下查找文件,注意此时没有可执行权限也可以

5、/xx/xx/xx/baby.sh

输入命令的绝对路径,文件必须有可执行权限,才可以这样运行哦

6、source xxx文件(仅限shell脚本程序)

source有个简写方式,就是.

. baby.sh

source baby.sh

shell从哪找一个命令呢?

当你在控制台输入echo命令的时候,shell去哪找这个命令呢?

一个命令是按照优先级去查找的,先找到的命令,就会被先执行了,规则如下

1、别名:alias命令定义的,比如ll就是个别名

2、shell关键字:if、for、then

3、函数:咱们自己写的shell函数

4、内置命令:cd、type、echo

5、可执行程序(外部命令):在PATH环境变量中指定的目录中寻找

 按照顺序,echo是内置命令,如果前面也有个echo同名的命令,那么被执行就是内置命令的前的echo命令,这个顺序规则,就是为了防止命令同名,接下来聊聊PATH环境变量

PATH环境变量

$ echo $PATH
/c/Users/cadi2/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/cadi2/bin:/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Windows/System32/OpenSSH:/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/cmd:/c/Program Files/nodejs:/c/Users/cadi2/AppData/Local/Android/Sdk/platform-tools:/c/Users/cadi2/AppData/Local/Android/Sdk/tools:/c/Program Files/Java/jdk-1.8/bin:/c/Users/cadi2/AppData/Local/Microsoft/WindowsApps:/c/Users/cadi2/AppData/Local/Programs/Microsoft VS Code/bin:/c/Users/cadi2/AppData/Roaming/npm:/usr/bin/vendor_perl:/usr/bin/core_perl
 

PATH环境变量中,保存的是各个目录,每个目录下面都是命令,我使用的windows电脑,嘿嘿,每个目录以冒号隔开。 比如ls命令,就位于/usr/bin目录下,这个/usr/bin目录就位于PATH环境变量中

$ which ls
/usr/bin/ls
 

 

什么情况下会提示命令找不到?

$ baby
bash: baby: command not found

我输入一个baby命令,bash提示我,这个命令找不到,其实bash是按照以下的顺序,找了一圈命令,但是他发现下面都没有baby这个命令

1、别名:alias命令定义的,比如ll就是个别名

2、shell关键字:if、for、then

3、函数:咱们自己写的shell函数

4、内置命令:cd、type、echo

5、可执行程序(外部命令):在PATH环境变量中指定的目录中寻找

 

 总结

1、加深对command的理解,对处理命令找不到的情况非常有作用

2、还有一种是找到的命令不是你想要的,如果你知道命令是怎么被bash找到的,处理起来就很轻松了

3、术语命令,表示什么,是不是很轻松了!

 

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值