2010-09-22 10 views

Trả lời

6

test -e sẽ kiểm tra xem tệp có tồn tại hay không. Lệnh kiểm tra trả về giá trị bằng không nếu thử nghiệm thành công hoặc 1 cách khác.

thử nghiệm có thể được viết dưới dạng test -e hoặc sử dụng []

[ -e "$file_name" ] && grep "poet" $file_name 

Trừ khi bạn thực sự cần đầu ra của grep bạn có thể kiểm tra giá trị trả về như grep sẽ trở lại 1 nếu không có trận đấu và zero nếu có là bất kỳ.

Nói chung bạn có thể kiểm tra xem một chuỗi không bị để trống sử dụng [ "string" ] mà sẽ trở về 0 nếu không rỗng và 1 nếu rỗng

4

Nếu bạn có test nhị phân được cài đặt hoặc ksh có phù hợp với built-in chức năng, bạn có thể sử dụng nó để thực hiện kiểm tra của bạn. Thường /bin/[ là một liên kết tượng trưng đến test:

if [ -e "$file_name" ]; then 
    echo "File exists" 
fi 

if [ -z "$used_var" ]; then 
    echo "Variable is empty" 
fi 
12
if test -e "$file_name";then 
... 
fi 

if grep -q "poet" $file_name; then 
    .. 
fi 
46

Thay vì lưu trữ đầu ra của grep trong một biến và sau đó kiểm tra xem biến là trống rỗng, bạn có thể làm điều này:

if grep -q "poet" $file_name 
then 
    echo "poet was found in $file_name" 
fi 

============

Dưới đây là một số thử nghiệm thường được sử dụng:

-d FILE 
      FILE exists and is a directory 
    -e FILE 
      FILE exists 
    -f FILE 
      FILE exists and is a regular file 
    -h FILE 
      FILE exists and is a symbolic link (same as -L) 
    -r FILE 
      FILE exists and is readable 
    -s FILE 
      FILE exists and has a size greater than zero 
    -w FILE 
      FILE exists and is writable 
    -x FILE 
      FILE exists and is executable 
    -z STRING 
      the length of STRING is zero 

Ví dụ:

if [ -e "$file_name" ] && [ ! -z "$used_var" ] 
then 
    echo "$file_name exists and $used_var is not empty" 
fi 
+0

-q là "yên tĩnh" bằng cách này. – brannigan

1

Bạn nên sử dụng lá cờ grep-q cho đầu ra yên tĩnh. Xem các trang người đàn ông dưới đây: Sản lượng grep

người đàn ông:

General Output Control 

    -q, --quiet, --silent 
       Quiet; do not write anything to standard output. Exit immediately with zero status 
       if any match is found, even if an error was detected. Also see the -s or 
       --no-messages option. (-q is specified by POSIX.) 

KornShell (ksh) Kịch bản này demo các grep đầu ra yên tĩnh và là một giải pháp cho câu hỏi của bạn.

grepUtil.ksh:

#!/bin/ksh 

#Initialize Variables 
file=poet.txt 
var="" 
dir=tempDir 
dirPath="/"${dir}"/" 
searchString="poet" 

#Function to initialize variables 
initialize(){ 
    echo "Entering initialize" 
    echo "Exiting initialize" 
} 

#Function to create File with Input 
#Params: 1}Directory 2}File 3}String to write to FileName 
createFileWithInput(){ 
    echo "Entering createFileWithInput" 
    orgDirectory=${PWD} 
    cd ${1} 
    > ${2} 
    print ${3} >> ${2} 
    cd ${orgDirectory} 
    echo "Exiting createFileWithInput" 
} 

#Function to create File with Input 
#Params: 1}directoryName 
createDir(){ 
    echo "Entering createDir" 
    mkdir -p ${1} 
    echo "Exiting createDir" 
} 

#Params: 1}FileName 
readLine(){ 
    echo "Entering readLine" 
    file=${1} 
    while read line 
    do 
     #assign last line to var 
     var="$line" 
    done <"$file" 
    echo "Exiting readLine" 
} 
#Check if file exists 
#Params: 1}File 
doesFileExit(){ 
    echo "Entering doesFileExit" 
    orgDirectory=${PWD} 
    cd ${PWD}${dirPath} 
    #echo ${PWD} 
    if [[ -e "${1}" ]]; then 
     echo "${1} exists" 
    else 
     echo "${1} does not exist" 
    fi 
    cd ${orgDirectory} 
    echo "Exiting doesFileExit" 
} 
#Check if file contains a string quietly 
#Params: 1}Directory Path 2}File 3}String to seach for in File 
doesFileContainStringQuiet(){ 
    echo "Entering doesFileContainStringQuiet" 
    orgDirectory=${PWD} 
    cd ${PWD}${1} 
    #echo ${PWD} 
    grep -q ${3} ${2} 
    if [ ${?} -eq 0 ];then 
     echo "${3} found in ${2}" 
    else 
     echo "${3} not found in ${2}" 
    fi 
    cd ${orgDirectory} 
    echo "Exiting doesFileContainStringQuiet" 
} 
#Check if file contains a string with output 
#Params: 1}Directory Path 2}File 3}String to seach for in File 
doesFileContainString(){ 
    echo "Entering doesFileContainString" 
    orgDirectory=${PWD} 
    cd ${PWD}${1} 
    #echo ${PWD} 
    grep ${3} ${2} 
    if [ ${?} -eq 0 ];then 
     echo "${3} found in ${2}" 
    else 
     echo "${3} not found in ${2}" 
    fi 
    cd ${orgDirectory} 
    echo "Exiting doesFileContainString" 
} 

#----------- 
#---Main---- 
#----------- 
echo "Starting: ${PWD}/${0} with Input Parameters: {1: ${1} {2: ${2} {3: ${3}" 
#initialize #function call# 
createDir ${dir} #function call# 
createFileWithInput ${dir} ${file} ${searchString} #function call# 
doesFileExit ${file} #function call# 
if [ ${?} -eq 0 ];then 
    doesFileContainStringQuiet ${dirPath} ${file} ${searchString} #function call# 
    doesFileContainString ${dirPath} ${file} ${searchString} #function call# 
fi 
echo "Exiting: ${PWD}/${0}" 

grepUtil.ksh Output:

[email protected] /tmp 
$ ksh grepUtil.ksh 
Starting: /tmp/grepUtil.ksh with Input Parameters: {1: {2: {3: 
Entering createDir 
Exiting createDir 
Entering createFileWithInput 
Exiting createFileWithInput 
Entering doesFileExit 
poet.txt exists 
Exiting doesFileExit 
Entering doesFileContainStringQuiet 
poet found in poet.txt 
Exiting doesFileContainStringQuiet 
Entering doesFileContainString 
poet 
poet found in poet.txt 
Exiting doesFileContainString 
Exiting: /tmp/grepUtil.ksh