如何使用 if 语句更改输出消息

如何使用 if 语句更改输出消息

当我运行此命令时,如果垃圾箱目录中没有任何内容,它仍然会输出相同的消息,当垃圾箱中没有文件时,我怎样才能让命令输出不同的消息?

            #! /bin/bash
            #! listwaste - Lists the names of all the files in your waste bin and their size
            #! Daniel Foster 23-11-2015

            echo "The files that are in the waste bin are:"

            ls -1 ~/bin/.waste/

我知道这应该很简单,但我才刚刚开始,我猜我应该使用 if 语句或类似的东西。

我在这里先向您的帮助表示感谢。

答案1

将输出分配给变量,表现不同,具体取决于:

$ mkdir ~/bin/.waste
$ OUTPUT=$( ls -1 ~/bin/.waste )
$ if [[ -z "$OUTPUT" ]]; then echo no waste; else echo $OUTPUT; fi
no waste
$ touch ~/bin/.waste/blkasdjf
$ OUTPUT=$( ls -1 ~/bin/.waste )
$ if [[ -z "$OUTPUT" ]]; then echo no waste; else echo $OUTPUT; fi
blkasdjf
$ 

答案2

内线:

trash() { ls -1 ~/bin/.waste; }; [[ $(trash | wc -l) -eq 0 ]] && echo no waste || echo -e "waste:\n$(trash)"

更好的格式:

trash() { ls -1 ~/bin/.waste; }
[[ $(trash | wc -l) -eq 0 ]] && echo no waste || echo -e "waste:\n$(trash)"

书呆子格式:

#!/bin/bash

function trash() {
  ls -1 ~/bin/.waste
}

if [[ $(trash | wc -l) -eq 0 ]]; then
  echo 'There are no files in the waste bin.'
else
  echo 'The files that are in the waste bin are:'
  trash
fi

所有 3 个示例都执行完全相同的功能,只是格式不同,具体取决于偏好。

如果您希望真正能够运行该命令listwaste,请将其放入名为 的脚本中listwaste,确保使其可执行 ( chmod +x),并将该脚本保存在您的$PATH.您可以echo $PATH看到这些目录包含可以直接从 shell 调用的可执行文件。

答案3

file_count=$(ls -1 ~/bin/.waste | wc -l)
if [[ $file_count == 0 ]]; then
    echo "There are no files in the waste bin"
else
    echo "The files that are in the waste bin are:"
    ls -1 ~/bin/.waste
fi

相关内容