簡體   English   中英

BASH grep腳本

[英]BASH grep script

我正在嘗試使用bash腳本來檢查腳本參數中的用戶名,然后輸出/ etc / passwd和/ etc / group文件(而不是/ etc / shadow文件)中的相關行。 目前,我正在使用if then else循環來檢查/ etc / *目錄的內容並輸出相關信息。 如果在兩個文件中找不到匹配用戶,我的意圖是輸出簡單的文本行,因此為空值。 但是,它輸出的信息對我正在尋找的東西完全不正確。作為BASH的新用戶,linux是通用的,我相信它會立即出現一些明顯的問題。 但是,我正在努力學習。

任何有關我的腳本代碼的幫助或正確方向的一點將不勝感激。 謝謝。

#! /bin/bash                                                              


USERLOOK='grep -h $USERID ~/etc/* | grep :x:'                       

grep $1 ~/etc/*                                                     
if [ -z $1 ]; then                                                        
    echo "User not found."                                            
else                                                                      
    echo "$USERLOOK"                                                  
fi                                                                        
exit 0

/etc/passwd/etc/group中查找包含輸入用戶名的任何行:

#!/bin/bash

USERLOOK=$(grep -h "$1" /etc/passwd /etc/group)

if [ -z "$1" ] || [ -z "${USERLOOK}" ]; then
    echo "User not found."
else
    echo "$USERLOOK"
fi

我希望在輸入./script user_to_check的地方使用腳本功能。 如果找到用戶名,我想輸出找到它的所有行...但是,如果找不到用戶名,我想回應一下。

它可以很簡單

#!/bin/bash
grep "^${1}:" /etc/passwd   /etc/group
[ $? -ne 0 ] && echo "User : ${1} not found"

當用戶名出現在/etc/passwd/etc/group的開頭時,我們在grep中放置一個^來匹配開頭的東西,按照傳統a :出現在用戶名之后。

運行腳本為

./script 'username'

停下來,你在想這一切都錯了。

UNIX shell是一個環境,可以使用一種語言調用UNIX工具來對這些調用進行排序,這就是全部。 用於操作文本的通用UNIX工具是awk。 因此,如果您需要在文件中查找文本並讓控制邏輯對其執行任何操作,那么應該是awk腳本,而不是shell腳本。 shell的作用是調用awk,如下所示:

awk -v user="$1" '
$0 ~ user { line = $0 }
END { print (line != "" ? line : "User not found") }
' /etc/passwd /etc/group

但請注意,使用awk將搜索重點放在一個字段上,即使是每個文件的不同字段也是微不足道的,這與grep的一般難度不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM