首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试返回一个简单的echo语句

尝试返回一个简单的echo语句
EN

Stack Overflow用户
提问于 2013-04-18 12:11:19
回答 2查看 42关注 0票数 1

我想输出“您尚未输入文件”。

如果用户在调用Unix脚本后没有输入任何内容,他们将收到该错误消息。

代码语言:javascript
运行
复制
for var in "$@"
do

file=$var

if [ $# -eq 0 ]
then
   echo "You have not entered a file"
elif [ -d $file ]
then
   echo "Your file is a directory"
elif [ -e $file ]
then
   sendToBin
else
  echo "Your file $file does not exist"
fi

我不知道到底是哪里出了问题,我相信这是我第一个if语句中的问题

EN

回答 2

Stack Overflow用户

发布于 2013-04-18 12:22:31

我会像这样重写它:

代码语言:javascript
运行
复制
#!/bin/bash

if (( $# == 0 )); then
    echo "You have not entered a file"
else
    for file in "$@"; do
        if [ -d "$file" ]; then
            echo "Your file is a directory"
        elif [ -e "$file" ]; then
            echo sendToBin "$file"
        else
            echo "Your file $file does not exist"
        fi
    done
fi

要点:

  • 脚本的结构应该是首先检查是否传递了任何参数。如果没有,则打印相应的消息。否则处理每个参数。所以做一个if ... else for ....
  • For运算,我使用arithmetic evaluation。该手册对在何处使用所有这些内容感到困惑,但您可以使用if (( ... )),也可以使用C风格的for (( i = 0; i < n; i++ )).
  • Always将任何变量包装在引号中,如$file"$file"。如果文件名中有像空格这样简单的东西,否则它将中断。
票数 0
EN

Stack Overflow用户

发布于 2013-04-18 12:25:24

仅在循环遍历位置参数的for中运行对$#的检查-也就是说,由于循环的原因,仅当$#为非零时才运行[ $# -gt 0 ]。尝试将检查移动到循环之外。

(另外,您的大多数$file都应该加引号("$file")。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16074339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档