Làm thế nào tôi có thể tạo một kịch bản có nhiều đối số?


14

Đây là một kịch bản rất đơn giản

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


if [ -h  "$1" ]
then
         echo "$1 is a symbolic link"
else    
         echo "$1 in not a symbolic link"
fi

~
Câu hỏi của tôi là: làm thế nào để thay đổi tập lệnh để nhận ra nhiều hơn 1 đối số? Tôi có 4 tệp và tôi muốn tập lệnh trả về

$1 is a symbolic link
$2 is not a symbolic link
$3 is not a symbolic link

Vân vân

Làm thế nào tôi có thể làm điều này?

Câu trả lời:


10

Sử dụng cùng cấu trúc với tập lệnh gốc của bạn, bạn chỉ cần lặp lại trên $@mảng (đó là danh sách các đối số được đưa ra trong dòng lệnh):

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


for file in "$@"
do
    if [ -h  "$file" ]
    then
         echo "$file is a symbolic link"
    else    
         echo "$file is not a symbolic link"
    fi
done

Một phiên bản đơn giản hóa của cùng một thứ sẽ là:

#!/usr/bin/env bash
[ "$#" -lt 1 ] && printf "Please give at least one argument\n" && exit 
for file 
do
    [ -h "$file" ] && printf "%s is a symbolic link\n" "$file" || 
        printf "%s is not a symbolic link\n" "$file"
done

7

Không ai nhắc đến ca?

if [ x = "x$1" ] ; then
    echo need at least one file
    exit 1
fi

while [ x != "x$1" ] ; do
  if [ -h  "$1" ]; then
    echo "$1 is a symbolic link"
  else    
    echo "$1 is not a symbolic link"
  fi
  shift
done

5

Bạn có thể sử dụng vòng lặp for để xử lý tất cả các tệp được truyền cho tập lệnh:

for f do
  if [ -h  "$f" ]; then
    printf "%s is a symbolic link\n" "$f"
  else    
    printf "%s is not a symbolic link\n" "$f"
  fi
done

3

Khác shift:

: "${1?USAGE: "$0" files...}"
while   [ "$#" -gt 0 ]
do      [ -h "$1" ]
        printf "'%s' is %.$((!$?*4))s%s\n" \
               "$1" "not " "a symbolic link." 
shift;  done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.