美文网首页
shell中判断指令是否存在3个内置指令

shell中判断指令是否存在3个内置指令

作者: 肖金光xjg | 来源:发表于2020-09-19 12:25 被阅读0次

type

type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法。

1.判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是

[root@c66 ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@c66 ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@c66 ~]# type if
if 是 shell 关键字
[root@c66 ~]# type cd
cd 是 shell 内嵌
[root@c66 ~]# type cdd
-bash: type: cdd: 未找到

2. -t判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是的另一种方法(适用于脚本编程)

[root@c66 ~]#  type -t wget
file
[root@c66 ~]#  type -t if
keyword
[root@c66 ~]#  type -t kill
builtin
[root@c66 ~]#  type -t sed
file

3. -a显示一个名字的所有可能,

[root@c66 ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@c66 ~]# type -a wget
wget 是 /usr/bin/wget
[root@c66 ~]# type -a cd
cd 是 shell 内嵌
cd 是 /usr/bin/cd

4. -p 小p,查看一个命令的执行路径(如果它是外部命令的话)

[root@c66 ~]# type -p ls  #内置命令,没有输出
[root@c66 ~]# type -p wget  #外部命令,有输出
/usr/bin/wget

5. -P 大p, 列出当前的readline函数名称和绑定。搜索命令物理路径

[root@c66 ~]# type -P ls   #内置命令
/usr/bin/ls
[root@c66 ~]# type -P wget  #外置命令
/usr/bin/wget

command

command命令在shell脚本里面,如果发现有个函数和我们需要执行的命令同名,我们可以用command用来强制执行命令,而不是同名函数,然后我们也可以在shell脚本里面判断某个命令是否存在,我们平时一般用which命令也行。

#!/bin/bash
 
function pwd()
{
    echo "I am pwd function"
}
 
echo "shell run pwd"
pwd
 
echo "shell command pwd"
command pwd
 
if  command -v pwd > /dev/null; then
    echo "pwd command has found"
else
    echo "pwd command has not found"
fi
 
if  command -v pwd1 > /dev/null; then
    echo "pwd1 command has found"
else
    echo "pwd1 command has not found"
fi

执行结果:

[root@c66 ~]# bash test.sh 
shell run pwd
I am pwd function
shell command pwd
/root
pwd command has found
pwd1 command has not found

hash

linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。
hash表的作用:
大大提高命令的调用速率。

参数

-l 显示hash表内容
-r 清除hash表
-d openssl 删除表中某一条(删除openssl)
-t openssl 查看openssl命令路径(hash表中没有的话,可以调用which命令)
-p /usr/bin/openssl aliesopenssl 往hash表中添加一条,执行aliesopenssl即执行openssl命令(起别名)

hash判断环境中是否存在某命令


check_program_installed() {
    hash $1 > /dev/null 2>&1
    if [ "$?" != "0" ]; then
    print "command $1 not found. is it installed?."
    exit 1
    fi
}

参考资料:
https://blog.csdn.net/heybeaman/article/details/89499537
https://www.cnblogs.com/jxhd1/p/6699177.html
https://www.cnblogs.com/pangkr-linux/p/10489582.html

相关文章

网友评论

      本文标题:shell中判断指令是否存在3个内置指令

      本文链接:https://www.haomeiwen.com/subject/ssyeyktx.html