【问题标题】:UNIX basic getopts troubleUNIX 基本 getopts 麻烦
【发布时间】:2013-09-15 15:59:54
【问题描述】:

我最近刚开始使用 UNIX,但在尝试实现 getopts 时遇到了问题。

下面的函数找到一个文件,然后将其删除到回收站,尽管我正在尝试使用带有 -i 的 getopts,它会在移动后显示一条消息。语法工作正常,但是当我使用 getotps 命令实现 while 循环时,它不再工作。

谁能给点有用的建议,不胜感激

function moveToBin(){

while getopts i opt
do
   case $opt in
   i) echo "file removed!" ;;
esac
done

if [[ -e $1 ]]; then
   inode=$(ls -i  $i | cut -d " " -f1)
   name=$1_$inode
   pathOfFile=$(pwd $1)
   restoreEntry=$1_$inode:$pathOfFile/$1

        mv $1 ~/deleted
        mv ~/deleted/$1 ~/deleted/$name
            echo "Before extension code"
               extension=$(find ~ -inum $inode)
 fi

【问题讨论】:

  • 我对在函数中使用getopts 持谨慎态度。在getopts 循环之后,您需要shift $(($OPTIND - 1)) 删除getopts 处理的选项。然后你需要检查是否有一个$1 剩余(如果还有一个$2,你的函数应该做什么——你是否应该在if 周围有一个for file in "$@" 循环,或者你应该检查并拒绝额外的参数?如果您发布完整的函数会更令人放心;您的代码至少缺少 } 并且谁知道还有什么。最好在文件名参数周围使用双引号以防止出现空格。跨度>

标签: linux shell unix getopts


【解决方案1】:
while getopts ...; do
  ...
done

getopts 将解析选项及其可能的参数。它将停止解析第一个非选项参数(不以连字符 (-) 开头的字符串,它不是前面任何选项的参数)。当它看到--(双连字符)时,它也会停止解析,这意味着选项结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多