[英]Binary operator expected error when running a bash script against a directory other than the one the script is currently located in
首先,我對 bash 腳本非常陌生。 我編寫了一個腳本來檢查目錄中的條目並打印有關條目的信息。 如果條目是文件,它會打印文件大小,如果有目錄,它會打印這些目錄中有多少項目。 當我針對它位於腳本中的目錄運行腳本時,它成功完成。 如果我對另一個目錄運行腳本,我會收到錯誤“Binary operator expected”。 這是可以預料的嗎? 這是代碼:
#!/bin/bash
# Print the contents of a directory with details on files and directories
files=( $1* )
count=0
for entry in $1/*
do
if [ -d $entry ]
then
for f in $entry/*
do
let count=count+1
done
echo $entry ":" "This is a directory with $count files present."
let count=0
else [ -f $entry ]
echo $entry "This is a file of" $(wc -c <"$entry") "bytes."
fi
done
我確信這段代碼並不完美,而且很可能有一個更簡單的方法,所以我只是在尋找一些建議。 感謝您的任何幫助。
弗曼德國人
固定腳本:
#!/usr/bin/env sh
for entry in "$1/"*; do
if [ -d "$entry" ]; then
count="$(printf '%s\0' "$entry/"* | grep -cF '')"
printf '%s : This is a directory with %d files present.\n' "$entry" "$count"
else
if [ -f "$entry" ]; then
size="$(wc -c <"$entry")"
printf '%s This is a file of %d bytes.\n' "$entry" "$size"
fi
fi
done
$1
參數周圍缺少引號的未使用賦值:files=( $1* )
$entry
變量周圍缺少引號的問題:if [ -d $entry ]
將循環替換為單個賦值、損壞的縮進和路徑$entry/
的非通配部分周圍缺少引號:
for f in $entry/* do let count=count+1 done
printf
替換echo
混合文字和變量缺少引號: echo $entry ":" "This is a directory with $count files present."
echo $entry "This is a file of" $(wc -c <"$entry") "bytes."
$entry
變量周圍添加了缺少的引號並添加了缺少的if
塊: else [ -f $entry ]
關於在不運行 shell 循環的情況下計算目錄中的條目的說明:
printf '%1s\0' "$entry/"* | grep -cF ''
printf '%1s\0' "$entry/"* | grep -cF ''
:
printf '%1s\0' "$entry/"*
:打印所有文件的 null 分隔列表。| grep -cF ''
| grep -cF ''
: Pipe 它進入grep
以計算null
字符)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.