Shell 文件和文件夹的例子

1. Shell 文件和文件夹的例子

1.1. 文件

1.1.1. 清空文件

cat /dev/null > aaa

1.1.2. 判断文件是否为空

1.1.3. 编辑文件

1.1.3.1. Linux 向文件末尾追加命令
// echo 后边用单引号包围要添加的内容
echo 'add content'>>/home/data/test.sh

注意: >> 是追加。

echo 'add content'>/home/data/test.sh

注意: > 是删除原有内容, 添加。

1.1.4. 获取当前文件夹下文件数

#!/bin/sh
count=`ls $*|wc -w`
echo $count
#if [ "$count" > "0" ];
#then
## echo "file size $count"
#else
## echo "empty!"
#fi

1.1.5. 统计文件夹下文件的个数

ls -l | grep "^-" | wc -l

1.1.6. 统计文件夹下文件个数, 包括子文件

ls -lR | grep "^-"| wc -l

1.2. 文件夹

1.2.1. 判断文件夹是否为空

#!/bin/sh
DIRECTORY=$1
if ["`ls -A $DIRECTORY`" = ""]; then
  echo "$DIRECTORY is indeed empty"
else
  echo "$DIRECTORY is not empty"
fi

1.2.2. 判断目录是否存在

#!/bin/sh
dir="test"
if [ ! -d $dir ]; then
        echo "$dir not exists"
        mkdir "$dir"
else
        echo "$dir exists!"
fi

1.2.3. 统计文件夹下目录个数

ls -l | grep "^d" | wc -l

1.2.4. 统计文件夹下目录个数, 包括子目录

ls -lR | grep "^d"| wc -l

2. Shell 流程控制

2.1. 退出脚本

2.1.1. 退出当前 Shell 脚本

#!/bin/sh
exit 1

2.1.2. 退出整个脚本

当使用管道时, 上述做法 exit 只能退出它所在的 Shell, 而放在管道中执行的命令 / 函数都是在独立的 Shell(Sub-Shell) 中执行的, 不会退出整个脚本, 正确的做法应该是使用 trap 和 kill 退出整个脚本:

#!/bin/bash

export TOP_PID=$$
trap 'exit 1' TERM

exit_script(){
    kill -s TERM $TOP_PID
}

echo "before exit"
:|exit_script
echo "after exit"
EOF

chmod a+x test.sh
./test.sh
echo $?

## 输出
before exit
1

这里首先在脚本的主进程中捕获(trap) TERM 信号: 当主进程接收到 TERM 信号后, 会执行 exit 1; 再在 Sub-Shell 中向脚本主进程发送 TERM 信号, 这样就可以让整个脚本退出了!

3. 判断一个命令是否存在

首先要说明的是, 不要使用 which 来进行判断, 理由如下:

  1. which 非 SHELL 的内置命令, 用起来比内置命令的开销大, 并且非内置命令会依赖平台的实现, 不同平台的实现可能不同。
# type type
type is a shell builtin
# type command
command is a shell builtin
# type which
which is hashed (/usr/bin/which)
  1. 很多系统的 which 并不设置退出时的返回值, 即使要查找的命令不存在, which 也返回 0
# which ls
/usr/bin/ls
# echo $?
0
# which aaa
no aaa in /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/bin /usr/local/sbin /usr/ccs/bin /usr/openwin/bin /usr/dt/bin 
# echo $?
0
  1. 许多系统的 which 实现, 都偷偷摸摸干了一些 “不足为外人道也” 的事情

所以, 不要用 which, 可以使用下面的方法:

$ command -v foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
$ type foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
$ hash foo 2>/dev/null || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }

犀利的原文, 可以在这里查看:

http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script/677212#677212

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值