我似乎在编写一段代码时遇到了麻烦(至少我认为无论如何).这是一个脚本,它解析一个名为test3_data.txt的文本文件,其中包含一堆用户ID,并将这些用户ID放入一个名为"USER_ID"的变量中.然后我测试它们是否有一个主目录,其中包含USER_ID变量中的任何文本.如果是这样,它将从系统中删除用户及其文件,主目录等.该脚本工作正常,但是当它完成运行时,userdel命令的手册页会显示出来.反正有没有阻止这种情况发生?我的代码有问题吗?谢谢!这是我的代码.
!/bin/sh
while read IN_RECORD
do
#Variable that reads user id
USER_ID=`echo $IN_RECORD |cut -d'|' -f1`
#Remove added users from data file.
test -d /home/{$USER_ID}
if [ "$?" = "1" ];
then
userdel -r $USER_ID
fi
done < test3_data.txt
Run Code Online (Sandbox Code Playgroud)
你的脚本有很多问题:
shebang线应该读#!/bin/sh(缺失#),或#!/usr/bin/env sh
变量引用{$USER_ID}不是您想要的 - ${USER_ID}是正确的形式(通常,只是$USER_ID足够).
您错误地测试成功:它是退出代码0,而不是1表示成功.此外,在bash脚本中,您应该使用[[而不是已弃用[的测试.(*)
显示的命令行帮助(不是手册页)的一个可能的解释$USER_ID是空的 - 由此产生的无效语法会导致userdel实用程序显示其命令行帮助.
最后,有一些方法可以简化您的脚本:
;只有在同一行放置更多语句时才需要语句结束.
您的测试可以合并为一个语句: if [ -d "/home/$USER_ID" ]; then
(*):作为@thom指出,[并且test仍然有自己的位置,如果你的脚本必须保持POSIX兼容.相比之下,在特定于bash的脚本中,[[最好使用它,因为它使用起来更方便,功能更多[- 请参阅http://mywiki.wooledge.org/BashFAQ/031.
请注意OP指定的shebang行sh- 可能会也可能不会导致bash处理,具体取决于平台.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |