使用命令行bash脚本和greping

时间:2012-01-16 18:59:25

标签: bash shell command-line grep

bash脚本的新手,所以只是想知道我是否正确地执行此代码。我试图搜索/ etc / passwd然后grep并打印用户。

usage ()
{
     echo      "usage: ./file.sk user"
}
# test if we have two arguments on the command line
if [ $# != 1 ]
then
    usage
    exit
fi

if [[ $# < 0 ]];then
   usage
   exit
fi

# Search for user
fullname=`grep $1 /etc/passwd | cut -f 5 -d :`
firstname=`grep $1 /etc/passwd | cut -f 5 -d : | cut -f 1 -d " "`

#check if there. if name is founf: print msg and line entry
not sure as how to this or if im doing this right...
我这样做对吗?

5 个答案:

答案 0 :(得分:3)

grep $1 /etc/passwd | while IFS=: read -r username passwd uid gid info home shell
do
  echo $username: $info
done

答案 1 :(得分:2)

这可能对您有用:

fullname=$(awk -F: '/'$1'/{print $5}' /etc/passwd)
firstname=${fullname/ *}

答案 2 :(得分:1)

而不是:

fullname=`grep $1 /etc/passwd | cut -f 5 -d :`
firstname=`grep $1 /etc/passwd | cut -f 5 -d : | cut -f 1 -d " "`

试试这个:

fullname=$(cut -f5 -d: /etc/passwd | grep "$1")

if [[ $? -ne 0 ]]; then
    # not found, do something
fi

firstname=${fullname%% *} # remove the space and everything after

请注意,我在grep之前更改了我的答案,以便在其他字段与您要搜索的全名匹配时不会出现误报。

答案 3 :(得分:1)

你走在正确的轨道上。

但我认为第二个if [[ $# < 0 ]] .... fi块对你没有多大帮助。你的第一个测试用例得到了正确的情况,'这个脚本需要1个参数或退出'。

另外,我看不到你需要的名字,所以基本测试是

 case "${fullname:--1}" in 
   -[1] ) printf "No userID found for input=$1\n" ; exit 1 ;;
   * )
     # assume it is OK
     # do what every you want after this case block
   ;;
 esac

当然,如果您真的需要检查,可以使用"${firstname}"复制此内容。

如果...... fi是

,则作为等价物
 if [[ "${fullname}" == "" ]] ; then
    printf "No userID found for input=$1\n" ; exit 1
 fi

注意为了提高效率,你可以解析$ {fullname}来获取firstname而不需要调用grep等,即

 firstname=${fullname%% *}

如果您需要我解释一下,请告诉我: - 1}和%% *}变量修饰符。

我希望这会有所帮助。

答案 4 :(得分:0)

您只需阅读array的输入,然后打印出所需的字段,就像这样 -

grep $1 /etc/passwd | while IFS=: read -a arry; do 
    echo ${arry[0]}:${arry[4]}; 
done

测试:

jaypal:~/Temp] echo "root:*:0:0:System Administrator:/var/root:/bin/sh" | 
while IFS=: read -a arry; do 
    echo ${arry[0]}:${arry[4]}; 
done
root:System Administrator