你好
這次,我將向您展示如何製作帶有條件的腳本 巴什,翻譯為:
如果完成了所需的X項操作,則完成了Y動作,如果未完成,則完成另一項操作。
簡單的解釋不😀
現在,我已經想了幾分鐘關於本教程中要使用的示例,我遇到了以下難題/問題/情況:
我們在公司的網絡上,我們想知道X計算機是否已連接到網絡。 為此,我們做一個 腳本 他會怎麼做 平 到該計算機,以及該計算機是否在網絡上(即,如果該計算機返回 平)會告訴我們是,它在網絡上,否則(也就是說,它不在網絡上)它將告訴我們它不在網絡上。
一旦完成,現在我將解釋如何在條件conditions下循環
這是代碼:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
別擔心,我會詳細向您解釋😉
平 是我們將使用的命令,它將告訴我們該PC是否在網絡上。 為了告訴您我們要檢查哪個PC是否在網絡上,我們必須更改 IP地址 顯然是我們要檢查的PC的IP地址。
如您所見,我把«-c 1«,這對我們來說是必需的。 當我們對計算機執行ping操作時,直到我們按一下自己,該操作才會停止(ping) [Ctrl] + [C],因此放置«-c 1»我們告訴您僅進行一次驗證(僅一次ping嘗試),而不會進行其他驗證,這將使其立即停止,即…它將僅檢查計算機是否在網絡上一次。
如果您對此有疑問,請別擔心...他們這麼說,我很樂意再次向您解釋😉
現在輪到這個週期了,因為我剛才解釋的只是普通的命令/動作😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
為了讓您理解這一點,我將解釋Bash的一個非常重要的細節
最了解該主題的人可能會稱我為錯誤或類似的東西,但是,嘿,我為新手或更少的專家寫這篇文章,只要他們理解然後很棒。
碰巧像 巴什 就像 0 y 1,即執行命令或動作時您是活著還是死了: 執行得很好 沒問題 (1),或 有一些 問題或 error (0).
我們執行X動作或命令,而我們所做的可能好壞,可能有錯誤,這是細節所在😉
如果我們發送要執行的操作(在這種情況下: ping -c 1 IP地址)沒有給出錯誤並成功執行,因此它將返回值: 1 。 否則,如果操作(即ping)未成功,它將返回值 0.
最後,以上代碼是什麼意思:
如果返回值0,則
顯示文字:«不在網絡上»
否則(並返回NOT 0,但返回1)
顯示文字:«如果在網絡中«
我剛剛向您解釋的這一點將來會在很多事情上為我們服務,因為可以說如果X動作出錯了,則執行Y動作,如果X動作沒有給出錯誤,那麼讓Z動作非常有用。
我知道有些人可能會參與其中,所以我試圖以幾種不同的方式來解釋它,試圖使每個人都以一種或另一種方式來理解它。 如果有人有任何疑問,請告訴我。
現在,讓我們編寫腳本😀
我們必須遵循本教程中的步驟: Bash:如何製作可執行腳本
然後,將以下代碼複製到該文件中(腳本文件),最後我們說«出口»(不帶引號):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
它應該看起來像這樣(記住,您必須將IP地址更改為所需的IP):
在這裡,您可以看到正在運行的腳本:
%CODE1%
如您所見,他最後告訴我們«是的,它在網絡中»🙂
這裡重要的是,他們實際上了解這些條件,因此,我從另一個角度為您提供了另一個代碼來再次解釋它。
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
這意味著簡單,我逐行留下說明:
第一行: 我們寫的就是變量«文本»(不帶引號)。
第二行: 檢查變量的內容(我們剛才寫的內容)是否為 3.
第一行: 如果被 3,它將向我們顯示文本«更正»(不帶引號)。
第四行: 否則(也就是說,如果我們沒有寫3)。
第四行: 它將向我們顯示文本«不正確的»(不帶引號)。
第四行: 條件結束。
他們已經意識到,如果我們把 錯過 然後在雙引號(«)文本,這將導致該文本顯示在終端中。 也就是說,如果我們輸入:
echo "esto es una prueba"
它將在終端顯示文本: 這是一個測試
但是,回到第二個示例,我將通過非常簡單的內容向您展示第二個腳本的有用性(和執行)……典型的«1 + 2多少錢?«
我留給您完整腳本的代碼:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
腳本的工作方式如下:
%CODE2%
好吧...僅此而已。
這是基本的,很簡單,是的,但是我仍然嘗試著盡可能地解釋它,因為並不是每個人都擁有程序員的靈魂,而且很多時候我們需要製作類似(或類似)的腳本,無論如何我希望本文對您有用。有人🙂
如有任何疑問或疑問,投訴或建議,請留在這裡,我會很樂意回答您,因此,我們都學到了更多的知識😀
問候
你是專業人士! *要么*
沒事的😀
如果它對您有用並且很有趣,我會滿意😉
問候朋友
@ KZKG ^ Gaara,
說到bash編程,我有一個問題:
像這樣聲明變量VAR = hello和像這樣聲明變量VAR = $ {VAR:-hello}有什麼區別?
我解釋:
http://pastebin.com/a3cfWXeD
問候😉
你好
好吧,我根本不是bash方面的專家...實際上,我不知道哈哈!
當我聲明變量時,它是這樣的:
: ${OPTFOLDER:="/opt/"}
但是因為我一直這樣做,所以我真的不知道會有什麼區別🙁
@ KZKG ^加拉拉
好吧,我問了這個問題,因為事實是我也不知道,我通常寫SlackBuilds,事實是在這些腳本中有很多在VAR1中聲明的變量。 快速的Google搜索幫助我澄清了這個問題,我與所有人分享了這一點,以便我們所有人都可以學習:
腳本:
http://pastebin.com/faAQb35w
說明:
以VAR = $ {VAR:-default_value}的形式聲明變量意味著變量VAR將在且僅當該值為null或不存在時採用值default_value。
實際示例:
執行腳本時,要求輸入要存儲在VAR變量中的值,如果輸入了內容,它將顯示輸入的內容。 如果不輸入任何內容,然後按Enter鍵,則將變量VAR聲明為null,因此它顯示default_value。
問候。
哈哈我不知道😀
好的,非常感謝您的朋友……這就是我在本文結尾處的意思,我無意教一些東西,僅此而已,我知道我將永遠在這裡學到一些新東西😀
問候和再次感謝。
沒錯,這裡有人學到了幾件事。
問候和節日快樂! 😀
很棒,而且講得很好+1,這將花費您時間...
但是我值得努力
實際上,我在短短80天內就寫了1%的文章,之所以花很長時間才發布,只是因為我的互聯網不允許我這樣做。
謝謝你的評論😉
另一種方法是使用DNS,因為有時網絡會阻止ICMP協議:
(主機-ta IP地址> / dev / null 2>&1)&&回顯“已連接到網絡”
您還將注意到,在此示例中,返回值檢查是隱式的😉
您一如既往地以我不完全知道的小竅門哈哈哈。
謝謝您的評論,我們非常感激,呵呵...我學到的另一件事
謝謝
🙂
儘管自從本主題發布以來已經過了幾天,但由於我用bash編寫了腳本,因此它對我有很大幫助。。謝謝Gaara ..
Doc。謝謝您的幫助,讓我明白了。
只是一個查詢,當一台計算機停止自動ping其他計算機時,我將如何更改IP。 我有這個。
更改IP
#!/斌/慶典
ping -c 10 192.168.1.50#如果沒有自動ping
ifconfig eth0 192.168.1.50網絡掩碼255.255.255.0廣播192.168.1.0
ifconfig eth0關閉
ifconfig eth0向上
因為與之比較時是否使用問號? 放之間有什麼區別? 任何其他字母
$? 表示“先前的輸出或輸出”,即在先前命令的結果的情況下...🙂
還有另一種方法可以達到相同的結果,將ping命令直接作為參數傳遞給if:
如果ping -c 1 IP地址; 然後
迴聲“是的,它在網上”
其他
回顯“不在網絡上”
fi
發生的情況是,如果計算作為參數傳遞的命令的返回值,則返回0,則返回true,否則返回false。 方括號等效於測試命令。 但是您可以將任何命令作為參數傳遞(只要命令返回一些值)。
您好,如何在腳本中與用戶X一起執行script.sh,我創建了用戶Y,並且該用戶Y繼續執行script.sh
能做到嗎?
非常有趣,謝謝!
感謝您的貢獻,我已經花了一個小時來了解xD,但是我了解它!
該腳本很好。 如果等於零,則算術上也可以用($?== 0)表示,它不在網絡上,否則在網絡上。 如果我們仍然想使其更具交互性,我們可以說:
echo -n輸入IP:
讀ip
ping -c 1 $ ip
您好,我對此很陌生,我試圖通過讀取來生成票證編號(字母數字),並且我希望如果輸入的內容具有正確的格式(ABC-123456),請執行“ x”命令而且我不知道該怎麼辦,您能幫我嗎?
迴聲“輸入票”
讀-p票
如果$ ticket =“不知道(格式ABC-123456”); 然後cp file.txt $ ticket; 否則回顯“格式錯誤,請重試”; 讀-p; fi。
當然這太可怕了,他們笑哈哈,但是就像我說的那樣,我才剛剛開始。
如果我解釋不好,請告訴我,我會嘗試做得更好。
擁抱大家。
很好的解釋,問候
我對 if、else 和其他人有點懷疑。
我想要一個腳本來檢查文件是否存在(日誌之一),如果不存在,則創建它並稍後寫入它。 但如果它存在,我希望你寫信給它。
我所擁有的是:
日期 = `日期 -R`
#我正在測試變量日期,它不會在開始之間更新
#process並結束,有時一個小時過去了,正確的時間沒有出來。
如果 [-f /home/user/logs/test.log];
然後
觸摸 /home/usuario/logs/test.log
其他
echo "$ date: Updated" >> /home/user/logs/test.log
迴聲«———————————————-» >> /home/user/logs/test.log
fi
理論上應該沒問題,但實際情況是,如果引用的文件已經存在,則不會更新
對不起,我看到它沒有發送,它已經翻了一番