shell脚本学习笔记(shell脚本实现文件的创建)

#!/bin/bash                                                                     
function is_dir()
{
    local dir=$1
    if [ -d ${dir} ];then
            return 0
    else
            return 1
    fi  
}
for val in $@
do
    if is_dir ${val};then
                :
    else
        echo "create it!"
        mkdir ${val}  > /dev/null 2>&1
        if [ $? -ne 0 ];then
            echo "create ${val} failed"
            exit 1
        fi  
    fi  
done

这是我实现的一个shell脚本,他可以用来创建文件夹,当然是有条件的创建的。如果文件不存在那么就不创建,若存在则创建。

首先参数是以命令行参数的形式传进去的,在执行这个脚本的时候将要创建的文件的名字带上,在脚本内部,有一个函数是用来判断要创建的文件是否已存在,for循环中拿到该函数的退出状态来判断是否需要创建它。

此外在该脚本中用到了 mkdir ${val} > /dev/null 2>&1  我就来说说这些语句吧。

1.  首先数字 0,1,2 这些相信大家都知道吧,在linux中: 0---标准输入 1---标准输出  2---标准错误

2.  在linux中 >,<,>> ,<<  这四个符号分别代表 输出重定向,输入重定向,输出追加重定向,输入追加重定向 ;其中追加重定向意思是:假如你重定向的目标是一个文件,那么简单重定向会覆盖原来文件的内容(在写代码时切记,否则伤心不是别人哟),而追加重定向是在原问价末尾跟上输入输出的内容

3.  2>&1 这句话的意思是 将标准错误输出重定向等同于标准输出;其中&1表示等同于的意思,但是&若跟在末尾则表示在后台执行的意思,这还是要区别开来的。

4.  mkdir ${val} > /dev/null 这表示创建文件时的相关的输出信息重定向到空的设备文件。其实 mkdir ${val} > /dev/null 2>&1  <-> mkdir ${val} 1 > dev/null 2>&1 后面的这种写法更能让人理解,首先将标准输出1重定向到空的设备文件,再将标准错误重定向到标准输出1,那么整句话的意思是将标准输出和标准错误都重定向到了空的设备文件,意思也就是清空,所以这样写可以用来避免shell命令或者程序的内容输出

运行结果如下:

shell脚本学习笔记(shell脚本实现文件的创建)_第1张图片

可以看出确实创建出了文件,但是有人问:你不是将输出“屏蔽”了吗,为什么还有两行输出,你是不搞错了,真菜...

其实我屏蔽的只是创建文件的相关信息,并不是所有信息,因为在重定向之前有一句echo语句,它的输出还是标准输出,所以我们可以看到两行输出。


你可能感兴趣的:(我的一些小研究,shell,脚本学习笔记)