สวัสดี
คราวนี้ฉันจะแสดงวิธีสร้างสคริปต์ที่มีเงื่อนไขใน ทุบตีซึ่งแปลคือ:
หากสิ่งที่คุณต้องการ X สำเร็จการดำเนินการ Y จะเสร็จสิ้นหากไม่สำเร็จการดำเนินการอื่นจะเสร็จสิ้น
คำอธิบายง่ายๆไม่😀
ตอนนี้ฉันได้คิดสักสองสามนาทีเกี่ยวกับตัวอย่างที่จะใช้ในบทช่วยสอนนี้ปัญหา / ปัญหา / สถานการณ์ต่อไปนี้เกิดขึ้นกับฉัน:
เราอยู่ในเครือข่ายของ บริษัท ของเราและเราต้องการทราบว่าคอมพิวเตอร์ X เชื่อมต่อกับเครือข่ายหรือไม่ สำหรับสิ่งนี้เราสร้างไฟล์ ต้นฉบับ เขาจะทำอะไร ปิง ไปยังคอมพิวเตอร์เครื่องนั้นและหากอยู่ในเครือข่าย (นั่นคือถ้าส่งคืนไฟล์ ปิง) จะบอกเราว่าใช่มันอยู่บนเครือข่ายมิฉะนั้น (นั่นคือมันไม่ได้อยู่บนเครือข่าย) มันจะบอกเราว่ามันไม่ได้อยู่ในเครือข่าย
เมื่อเสร็จแล้วตอนนี้ฉันจะอธิบายวิธีการวนรอบด้วยเงื่อนไข🙂
นี่คือรหัส:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
ไม่ต้องกังวลฉันจะอธิบายรายละเอียดให้ฟัง😉
ปิง เป็นคำสั่งที่เราจะใช้และจะบอกเราว่าพีซีเครื่องนั้นอยู่ในเครือข่ายหรือไม่ ในการบอกคุณว่าพีซีเครื่องใดที่เราต้องการตรวจสอบว่าอยู่ในเครือข่ายหรือไม่เราต้องเปลี่ยน ที่อยู่ IP เห็นได้ชัดว่าที่อยู่ IP ของพีซีที่เราต้องการตรวจสอบ
อย่างที่คุณเห็นฉันใส่«-ค 1«ซึ่งจำเป็นสำหรับเรา เมื่อเรา ping คอมพิวเตอร์การกระทำนี้จะไม่หยุด (ping) จนกว่าเราจะกดเอง [Ctrl] + [C]ดังนั้นการวาง«-ค 1»เราขอแจ้งให้คุณทำการตรวจสอบเพียงครั้งเดียว (การ ping เพียงครั้งเดียว) และไม่ต้องดำเนินการใด ๆ สิ่งนี้จะทำให้หยุดทันทีนั่นคือ ... จะตรวจสอบว่าคอมพิวเตอร์อยู่ในเครือข่ายเพียงครั้งเดียวหรือไม่
หากคุณมีข้อสงสัยเกี่ยวกับเรื่องนี้ไม่ต้องเจ็บปวด ... พวกเขาพูดอย่างนั้นและฉันยินดีที่จะอธิบายให้คุณฟังอีกครั้ง😉
ตอนนี้มาถึงวัฏจักรแล้วเพราะสิ่งที่ฉันเพิ่งอธิบายไปนั้นไม่มีอะไรมากไปกว่าคำสั่ง / การกระทำปกติ😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
เพื่อให้คุณเข้าใจสิ่งนี้ฉันจะอธิบายรายละเอียดที่สำคัญอย่างยิ่งของ Bash 🙂
ผู้ที่มีความรู้มากที่สุดในเรื่องนี้อาจตราหน้าว่าฉันผิดหรืออะไรทำนองนั้น แต่เดี๋ยวก่อนฉันเขียนสิ่งนี้สำหรับมือใหม่หรือผู้เชี่ยวชาญน้อยกว่าตราบเท่าที่พวกเขาเข้าใจเรื่องนี้ก็เป็นเรื่องที่ดี
มันเกิดขึ้นเช่นเดียวกับใน ทุบตี มันเป็นอย่างนั้น 0 y 1นั่นคือไม่ว่าคุณจะมีชีวิตอยู่หรือคุณตายไปแล้วเมื่อมีการดำเนินการคำสั่งหรือการกระทำ: อย่างใดอย่างหนึ่ง ดำเนินการได้ดี ไม่มีปัญหา (1) หรือ มีบางอย่าง ปัญหาหรือ ความผิดพลาด (0).
เราดำเนินการ X Action หรือคำสั่งและสิ่งที่เราทำอาจดำเนินไปด้วยดีหรือไม่ดีอาจมีข้อผิดพลาดหรือไม่และนี่คือที่มาของรายละเอียด😉
หากสิ่งที่เราส่งไปทำ (ในกรณีนี้: ping -c 1 IP-ADDRESS) ไม่ได้ให้ข้อผิดพลาดและประสบความสำเร็จดังนั้นมันจะคืนค่า: 1 . มิฉะนั้นและหากการดำเนินการ (นั่นคือ ping) ไม่สำเร็จจะส่งคืนค่า 0.
และในที่สุดความหมายของรหัสข้างต้นก็คือ:
หากส่งคืนค่า 0 แล้ว
แสดงข้อความ: «ไม่ได้อยู่ในเครือข่าย»
มิฉะนั้น (และกลับไม่ใช่ 0 แต่ 1)
แสดงข้อความ: «หากอยู่ในเครือข่าย«
สิ่งนี้ที่ฉันเพิ่งอธิบายให้คุณฟังจะให้บริการเราในอนาคตสำหรับหลาย ๆ สิ่งเพราะมันมีประโยชน์มากที่จะสามารถพูดได้ว่าหากการกระทำ X เกิดข้อผิดพลาดให้ทำการกระทำ Y และในกรณีที่การกระทำ X ไม่ได้ให้ ข้อผิดพลาดจากนั้นให้ดำเนินการ Z
ฉันรู้ว่าบางคนอาจมีส่วนเกี่ยวข้องเล็กน้อยดังนั้นฉันจึงพยายามอธิบายด้วยวิธีต่างๆมากมายพยายามทำให้ทุกคนเข้าใจไม่ทางใดก็ทางหนึ่ง ในกรณีที่มีใครสงสัยโปรดแจ้งให้เราทราบ
ตอนนี้ขอสร้างสคริปต์ของเรา😀
เราต้องทำตามขั้นตอนในบทช่วยสอนนี้: Bash: วิธีสร้างสคริปต์ปฏิบัติการ
จากนั้นให้คัดลอกโค้ดต่อไปนี้ลงในไฟล์ (script.sh) และในตอนท้ายสมมติว่า«ทางออก» (ไม่มีเครื่องหมายคำพูด):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
ควรมีลักษณะดังนี้ (จำไว้ว่าคุณต้องเปลี่ยน IP-ADDRESS เป็น IP ที่คุณต้องการ):
คุณสามารถดูสคริปต์ที่กำลังทำงานอยู่ที่นี่:
% CODE1%
อย่างที่คุณเห็นในท้ายที่สุดเขาก็บอกเราว่า«ใช่มันอยู่ในเครือข่าย»🙂
สิ่งสำคัญที่นี่คือพวกเขาเข้าใจเงื่อนไขนี้จริงๆดังนั้นฉันจึงปล่อยรหัสอื่นให้คุณอธิบายอีกครั้ง แต่จากมุมมองอื่น
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
สิ่งนี้หมายความว่าง่ายฉันปล่อยให้คำอธิบายทีละบรรทัด:
บรรทัดที่ 1: สิ่งที่เราเขียนนั่นจะเป็นค่าของตัวแปร«ข้อความ» (ไม่มีเครื่องหมายคำพูด)
บรรทัดที่ 2: ตรวจสอบว่าเนื้อหาของตัวแปร (สิ่งที่เราเพิ่งเขียน) คืออะไร 3.
บรรทัดที่ 3: ในกรณีที่เป็น 3มันจะแสดงให้เราเห็นข้อความ«แก้ไข» (ไม่มีเครื่องหมายคำพูด)
บรรทัดที่ 4: มิฉะนั้น (นั่นคือในกรณีที่เราไม่ได้เขียน 3)
บรรทัดที่ 5: มันจะแสดงข้อความ«ไม่ถูกต้อง» (ไม่มีเครื่องหมายคำพูด)
บรรทัดที่ 6: สิ้นสุดเงื่อนไข
พวกเขาจะรู้ได้อย่างไรว่าเราใส่ เสียงสะท้อน แล้วระหว่างเครื่องหมายคำพูดคู่ («) ข้อความซึ่งจะทำให้ข้อความนั้นแสดงในเทอร์มินัล นั่นคือถ้าเราใส่:
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 ^ กาอาระ
เมื่อพูดถึงการเขียนโปรแกรม bash ฉันมีคำถาม:
อะไรคือความแตกต่างระหว่างการประกาศตัวแปรเช่น VAR = hello นี้และการประกาศเช่นนี้ VAR = $ {VAR: -hello}
ฉันอธิบาย:
http://pastebin.com/a3cfWXeD
ทักทาย😉
สวัสดี
ฉันไม่ได้เชี่ยวชาญเรื่องการทุบตีเลย ... ที่จริงฉันไม่รู้เลยล่ะ !!
เมื่อฉันประกาศตัวแปรมันเป็นดังนี้:
: ${OPTFOLDER:="/opt/"}
แต่เพราะฉันทำแบบนี้มาตลอดฉันจึงไม่รู้ว่าความแตกต่างนั้นจะเป็นอย่างไร🙁
@ KZKG ^ กาอาระ
ฉันถามคำถามนี้เพราะความจริงก็คือฉันไม่รู้เหมือนกันฉันมักจะเขียน SlackBuilds และความจริงก็คือตัวแปรที่ประกาศใน VAR1 นั้นมีอยู่มากมายในสคริปต์เหล่านี้ การค้นหาโดย Google อย่างรวดเร็วช่วยให้ฉันกระจ่างคำถามนี้ฉันแชร์กับทุกคนเพื่อให้เราทุกคนได้เรียนรู้:
สคริปต์:
http://pastebin.com/faAQb35w
คำอธิบาย:
ประกาศตัวแปรของรูปแบบ VAR = $ {VAR: -default_value} หมายความว่าตัวแปร VAR จะรับค่า default_value ถ้าค่าเป็นโมฆะหรือไม่มีอยู่เท่านั้น
ตัวอย่างการปฏิบัติ:
เมื่อเรียกใช้สคริปต์ระบบจะขอให้ป้อนค่าที่จะเก็บไว้ในตัวแปร VAR หากมีการป้อนข้อมูลจะแสดงสิ่งที่ป้อน หากเราไม่ป้อนอะไรเลยและกด Enter เรากำลังประกาศตัวแปร VAR เป็น null ดังนั้นจึงแสดง value_default
อาศิรพจน์
ฮ่าฮ่าฉันไม่รู้ว่า😀
โอเคขอบคุณมากเพื่อน ... นั่นคือสิ่งที่ฉันหมายถึงในตอนท้ายของบทความฉันไม่ได้ตั้งใจที่จะสอนอะไรบางอย่างและนั่นก็คือฉันรู้ว่าฉันจะเรียนรู้สิ่งใหม่ ๆ ที่นี่เสมอ😀
ทักทายและขอบคุณอีกครั้ง
คุณพูดถูกคนหนึ่งเรียนรู้หลายสิ่งที่นี่
ทักทายและสุขสันต์วันหยุด !! 😀
+1 ที่ยอดเยี่ยมและอธิบายได้ดีเยี่ยมเวลาที่จะนำคุณ ...
แต่ฉันก็คุ้มค่ากับความพยายาม😉
อันที่จริงฉันเขียน 80% ในเวลาเพียง 1 วันฉันใช้เวลานานมากในการเผยแพร่เพียงเพราะอินเทอร์เน็ตไม่ยอมให้ฉัน
ขอบคุณสำหรับความคิดเห็นของคุณ😉
อีกวิธีในการดำเนินการคือการใช้ DNS เนื่องจากบางครั้งเครือข่ายมีโปรโตคอล ICMP ถูกบล็อก:
(โฮสต์ -ta IP-ADDRESS> / dev / null 2> & 1) && echo "เชื่อมต่อกับเครือข่าย"
คุณจะสังเกตเห็นว่าในตัวอย่างนี้การตรวจสอบค่าส่งคืนเป็นนัย im
คุณเป็นเพื่อนเสมอกับเคล็ดลับที่ฉันไม่รู้อย่างสมบูรณ์ HAHAHA
ขอบคุณความคิดเห็นชื่นชมและฮิฮิ ... อีกสิ่งใหม่ที่ได้เรียนรู้😀
กราเซีย
🙂
แม้ว่าจะผ่านไปหลายวันแล้วก็ตามตั้งแต่มีการเผยแพร่หัวข้อนี้ แต่ก็มีประโยชน์ต่อฉันมากตอนนี้ฉันได้สร้างสคริปต์ออกมาแล้ว .. ขอบคุณกาอาระ ..
หมอขอบคุณสำหรับความช่วยเหลือที่คุณทำให้ฉันเข้าใจ
เพียงแค่สอบถามฉันจะทำอย่างไรเมื่อคอมพิวเตอร์เครื่องหนึ่งหยุด ping โดยอัตโนมัติ IP ของการเปลี่ยนแปลงอื่น ๆ ฉันมีสิ่งนี้
เพื่อเปลี่ยน IP
#! / bin / ทุบตี
ping -c 10 192.168.1.50 # ถ้าไม่ ping โดยอัตโนมัติ
ifconfig eth0 192.168.1.50 netmask 255.255.255.0 ออกอากาศ 192.168.1.0
ifconfig eth0 ลง
ifconfig eth0 ขึ้น
เพราะเมื่อเปรียบเทียบกับ if you use the question mark? อะไรคือความแตกต่างระหว่างการใส่? จดหมายอื่น ๆ
$? หมายถึง 'เอาต์พุตก่อนหน้าหรือเอาต์พุต' นั่นคือในกรณีที่ผลลัพธ์ของคำสั่งก่อนหน้า ... 🙂
มีอีกวิธีหนึ่งในการบรรลุผลลัพธ์เดียวกันโดยส่งคำสั่ง ping โดยตรงเป็นอาร์กิวเมนต์ไปที่ if:
ถ้า ping -c 1 IP-ADDRESS; แล้ว
ก้อง "ใช่มันอยู่ในเน็ต"
อื่น
เสียงสะท้อน "ไม่อยู่ในเครือข่าย"
fi
สิ่งที่เกิดขึ้นคือหากประเมินค่าที่ส่งคืนของคำสั่งที่คุณส่งผ่านเป็นอาร์กิวเมนต์หากส่งคืนค่า 0 ว่าเป็นจริงสิ่งอื่นใดเป็นเท็จ วงเล็บเหลี่ยมเทียบเท่ากับคำสั่งทดสอบ แต่คุณสามารถส่งคำสั่งใด ๆ เป็นอาร์กิวเมนต์ได้ (ตราบใดที่คำสั่งส่งคืนค่าบางอย่าง)
สวัสดีฉันจะรัน script.sh กับผู้ใช้ X ในสคริปต์ได้อย่างไรฉันสร้างผู้ใช้ Y และผู้ใช้ Y นั้นยังคงเรียกใช้สคริปต์ต่อไป
ทำได้แค่นี้ ??
น่าสนใจมากขอบคุณ!
ขอบคุณสำหรับการสนับสนุนฉันใช้เวลาหนึ่งชั่วโมงในการทำความเข้าใจ xD แต่ฉันเข้าใจแล้ว !!!!
บทก็ใช้ได้ ในทางคณิตศาสตร์มันสามารถทำได้ในฐานะ ($? == 0) ถ้ามันเท่ากับศูนย์มันไม่ได้อยู่บนเครือข่ายมิฉะนั้นมันจะอยู่บนเครือข่าย และถ้าเรายังต้องการทำให้มันมีการโต้ตอบมากขึ้นเราสามารถพูดได้ว่า:
echo -n ป้อน IP:
อ่าน ip
ping -c 1 $ ip
สวัสดีฉันใหม่มากสำหรับสิ่งนี้ฉันกำลังพยายามสร้างหมายเลขตั๋ว (ตัวอักษรและตัวเลข) ผ่านการอ่านและฉันต้องการว่าหากสิ่งที่ป้อนมีรูปแบบที่ถูกต้อง (ABC-123456) ให้รันคำสั่ง "x" และฉันก็ไม่ ' ไม่ทราบวิธีทำคุณช่วยฉันได้ไหม
echo "ป้อนตั๋ว"
อ่าน -p ตั๋ว
ถ้า $ ticket = "ไม่มีความคิด (รูปแบบ ABC-123456"); จากนั้น cp file.txt $ ticket; อื่นสะท้อน "รูปแบบไม่ถูกต้องลองอีกครั้ง"; อ่าน -p; fi.
แน่นอนว่ามันน่ากลัวและพวกเขาก็หัวเราะฮ่า ๆ แต่อย่างที่ฉันบอกว่าฉันเพิ่งเริ่มจากสิ่งนี้
ถ้าฉันอธิบายไม่ดีโปรดบอกฉันและฉันจะพยายามทำให้ดีขึ้น
กอดทุกคน.
คำอธิบายที่ยอดเยี่ยมทักทาย
ฉันมีข้อสงสัยเล็กน้อยกับ if, else และคนอื่น ๆ
ฉันต้องการให้สคริปต์ตรวจสอบว่ามีไฟล์อยู่ (หนึ่งในบันทึก) และหากไม่มี ให้สร้างไฟล์แล้วเขียนในภายหลัง แต่ถ้ามันมีอยู่ ฉันอยากให้คุณเขียนถึงมัน
สิ่งที่ฉันมีคือ:
วันที่ = `วันที่ -R`
#ฉันกำลังทดสอบวันที่ตัวแปร ซึ่งไม่ได้อัปเดตระหว่างการเริ่มต้นของ a
#กระบวนการและสิ้นสุด บางครั้งหนึ่งชั่วโมงอาจผ่านไป และเวลาที่ถูกต้องไม่ออกมา
ถ้า [-f /home/user/logs/test.log];
แล้วก็
แตะ /home/usuario/logs/test.log
อื่น
echo "$ วันที่: อัปเดต" >> /home/user/logs/test.log
เสียงสะท้อน «———————————————- » >> /home/user/logs/test.log
fi
ตามทฤษฎีแล้วน่าจะใช้ได้ แต่ความจริงคือไม่มีการอัปเดตหากไฟล์อ้างอิงมีอยู่แล้ว
ขอโทษค่ะ เห็นว่าไม่ได้ส่งไปเพิ่มเป็นสองเท่า