Я пишу сценарий для загрузки набора файлов, и я хочу, чтобы он сообщил, когда конкретный файл не существует.
r=`wget -q www.someurl.com`
if [ $r -ne 0 ]
then echo "Not there"
else echo "OK"
fi
Но это дает следующую ошибку на выполнении:
./file: line 2: [: -ne: unary operator expected
Что случилось?
$ r
- текстовый вывод wget (который вы записали с обратными кавычками). Для доступа к коду возврата используйте переменную $?
.
$ r
пусто, поэтому ваше условие становится , если [-ne 0]
, и кажется, что -ne
используется как унарный оператор. Попробуйте вместо этого:
wget -q www.someurl.com
if [ $? -ne 0 ]
...
EDIT Как объяснил до меня Эндрю, обратные кавычки возвращают стандартный вывод, а $?
возвращает код выхода последней операции.
Другие правильно указали, что вы можете использовать $?
, чтобы получить самый последний код выхода:
wget_output=$(wget -q "$URL")
if [ $? -ne 0 ]; then
...
Это позволяет вам захватить оба стандартный вывод и код выхода. Если вам на самом деле все равно, что он печатает, вы можете просто протестировать его напрямую:
if wget -q "$URL"; then
...
И если вы хотите подавить вывод:
if wget -q "$URL" > /dev/null; then
...
вы могли бы просто
wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure"
-(~)----------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2024] --> wget ruffingthewitness.com && echo "WE GOT IT" || echo "Failure"
--2010-04-27 07:30:56-- http://ruffingthewitness.com/
Resolving ruffingthewitness.com... 69.56.251.239
Connecting to ruffingthewitness.com|69.56.251.239|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html.1'
[ <=> ] 14,252 72.7K/s in 0.2s
2010-04-27 07:30:58 (72.7 KB/s) - `index.html.1' saved [14252]
WE GOT IT
-(~)-----------------------------------------------------------------------------------------------------------(07:30 Tue Apr 27)
risk@DockMaster [2025] --> wget ruffingthewitness.biz && echo "WE GOT IT" || echo "Failure"
--2010-04-27 07:31:05-- http://ruffingthewitness.biz/
Resolving ruffingthewitness.biz... failed: Name or service not known.
wget: unable to resolve host address `ruffingthewitness.biz'
zsh: exit 1 wget ruffingthewitness.biz
Failure
-(~)-----------------------------------------------------------------------------------------------------------(07:31 Tue Apr 27)
risk@DockMaster [2026] -->