欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Linux Shell 判断块设备节点是否存在 有大用

/*************************************************************************
 *                   Linux Shell 判断块设备节点是否存在
 * 说明:
 *     能牌问shell脚本-f不能判断mmc设备节点的问题,查了一下资料,发现不能
 * 使用-f来判断,要使用-e或者-b来判断才行。
 *
 *                                      2017-1-17 深圳 南山平山村 曾剑锋
 ************************************************************************/

一、参考文档:
    1. shell脚本判断设备节点是否存在
        http://www.360doc.com/content/12/0304/10/1317564_191540155.shtml

二、参数说明:
    -b file = True if the file exists and is block special file.块设备文件存在
    -c file = True if the file exists and is character special file.字符设备文件存在
    -d file = True if the file exists and is a directory.目录文件存在
    -e file = True if the file exists.文件存在
    -f file = True if the file exists and is a regular file普通文件存在
    -g file = True if the file exists and the set-group-id bit is set.文件存在且设置了组标记位
    -k file = True if the files' "sticky" bit is set.
    -L file = True if the file exists and is a symbolic link.文件存在且是个符号文件
    -p file = True if the file exists and is a named pipe.文件存在且是一个命名管道
    -r file = True if the file exists and is readable.文件存在且是可读的
    -s file = True if the file exists and its size is greater than zero.文件存在
复制代码


来自 https://www.cnblogs.com/zengjfgit/p/6292117.html


shell脚本判断设备节点是否存在

今天有个朋友问我如何判断一个设备节点是否存在,觉的很简单的问题,结果破费周折。

那个朋友首先发过来一个脚本说不行:

#!/bin/sh
echo "Find usb disk......."
 
 
if [ -f /dev/sda1 ]; then
    echo "Runing mount > /udisk"
 
else
    echo "Runing WLAN......"
fi
 
echo "Mount usb disk to /udisk Success"

 

执行结果就是不能执行 echo "Runing mount > /udisk"
找了半天原因,忽然发现是判断条件有问题啊。

一般的普通文件的判断条件是 -f。但对于设备节点等特殊文件那就不行了。必须使用与文件类型或者说设备类型相对应的判断条件才可以。

    * -b file = True if the file exists and is block special file.块设备文件存在
    * -c file = True if the file exists and is character special file.字符设备文件存在
    * -d file = True if the file exists and is a directory.目录文件存在
    * -e file = True if the file exists.文件存在
    * -f file = True if the file exists and is a regular file普通文件存在
    * -g file = True if the file exists and the set-group-id bit is set.文件存在且设置了组标记位
    * -k file = True if the files' "sticky" bit is set.
    * -L file = True if the file exists and is a symbolic link.文件存在且是个符号文件
    * -p file = True if the file exists and is a named pipe.文件存在且是一个命名管道
    * -r file = True if the file exists and is readable.文件存在且是可读的
    * -s file = True if the file exists and its size is greater than zero.文件存在
   参照上面的说明,我们要判断一个文件存在而不管其类型,那么可以使用 -e,如果要同时检查其类型,那么我们可以使用相对应的判断条件。就拿这个朋友的代码来说,应该使用-e或者-b才是正确的。

 

这段代码正确的写法应该是:

#!/bin/sh
echo "Find usb disk......."
 if [ -b /dev/sda1 ]; then
    echo "Runing mount > /udisk"
else
    echo "Runing WLAN......"
fi
 echo "Mount usb disk to /udisk Success"

来自  https://blog.csdn.net/qq160816/article/details/51645074

普通分类: