คำถามติดแท็ก scripting

การเขียนสคริปต์เป็นรูปแบบของการเขียนโปรแกรมโดยทั่วไปมีลักษณะเป็นทางการต่ำพิมพ์หลวมและไม่ต้องการการรวบรวมที่ชัดเจน มีภาษาสคริปต์จำนวนมากและสิ่งเหล่านี้ใช้ในสถานการณ์ที่หลากหลาย - แอปพลิเคชันบรรทัดคำสั่ง, GUI, แอปพลิเคชันฝั่งเซิร์ฟเวอร์, โมดูลส่วนขยาย

20
ฉันจะบอกได้อย่างไรว่าไฟล์ปกติไม่มีอยู่ใน Bash
ฉันใช้สคริปต์ต่อไปนี้เพื่อดูว่ามีไฟล์อยู่หรือไม่: #!/bin/bash FILE=$1 if [ -f $FILE ]; then echo "File $FILE exists." else echo "File $FILE does not exist." fi อะไรไวยากรณ์ที่ถูกต้องที่จะใช้ถ้าฉันเพียงต้องการตรวจสอบว่าไฟล์ไม่ได้อยู่? #!/bin/bash FILE=$1 if [ $FILE does not exist ]; then echo "File $FILE does not exist." fi
3261 bash  file-io  scripting 

30
ฉันจะแยกสตริงบนตัวคั่นใน Bash ได้อย่างไร
ฉันมีสตริงนี้เก็บไว้ในตัวแปร: IN="bla@some.com;john@home.com" ตอนนี้ฉันต้องการแยกสตริงด้วย;ตัวคั่นเพื่อให้ฉันมี: ADDR1="bla@some.com" ADDR2="john@home.com" ฉันไม่ต้องการADDR1และADDR2ตัวแปร หากพวกเขาเป็นองค์ประกอบของอาเรย์ที่ดียิ่งขึ้น หลังจากข้อเสนอแนะจากคำตอบด้านล่างฉันลงเอยด้วยสิ่งต่อไปนี้ซึ่งเป็นสิ่งที่ฉันเป็นหลังจาก: #!/usr/bin/env bash IN="bla@some.com;john@home.com" mails=$(echo $IN | tr ";" "\n") for addr in $mails do echo "> [$addr]" done เอาท์พุท: > [bla@some.com] > [john@home.com] มีวิธีการแก้ปัญหาที่เกี่ยวข้องกับการตั้งค่าเป็นInternal_field_separator (ไอเอฟเอ) ;เพื่อ ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับคำตอบนั้นคุณจะรีเซ็ตอย่างไรIFSกลับเป็นค่าเริ่มต้นได้อย่างไร RE: IFSวิธีแก้ปัญหาฉันลองใช้ดูแล้วมันได้ผลฉันใช้รุ่นเก่าIFSแล้วคืนค่า: IN="bla@some.com;john@home.com" OIFS=$IFS IFS=';' mails2=$IN for x in $mails2 do echo "> [$x]" done …
2041 bash  shell  split  scripting 

15
จะ mkdir ได้อย่างไรถ้าไม่มี dir อยู่?
ฉันกำลังเขียนเชลล์สคริปต์ให้ทำงานภายใต้ KornShell (ksh) บน AIX ฉันต้องการใช้mkdirคำสั่งเพื่อสร้างไดเรกทอรี แต่ไดเรกทอรีอาจมีอยู่แล้วในกรณีนี้ฉันไม่ต้องการทำอะไรเลย ดังนั้นฉันจึงต้องการทดสอบเพื่อดูว่าไม่มีไดเรกทอรีหรือระงับข้อผิดพลาด "มีไฟล์" ที่ผิดพลาดmkdirเมื่อพยายามสร้างไดเรกทอรีที่มีอยู่ มีความคิดเห็นเกี่ยวกับวิธีการที่ดีที่สุดในการทำเช่นนี้?
1987 shell  scripting  ksh  aix  mkdir 

30
ฉันจะแยกอาร์กิวเมนต์บรรทัดคำสั่งใน Bash ได้อย่างไร
บอกฉันว่าฉันมีสคริปต์ที่ถูกเรียกด้วยบรรทัดนี้: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile หรืออันนี้: ./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile เป็นวิธีที่ได้รับการยอมรับของการแยกเช่นนี้ว่าในแต่ละกรณี (หรือการรวมกันของทั้งสองบางคน) $v, $fและ $dทั้งหมดจะถูกตั้งค่าtrueและ$outFileจะเท่ากับ/fizz/someOtherFile?

30
ฉันจะพร้อมต์สำหรับอินพุตใช่ / ไม่ใช่ / ยกเลิกในสคริปต์เชลล์ Linux ได้อย่างไร
ฉันต้องการหยุดการป้อนข้อมูลในเชลล์สคริปต์และแจ้งให้ผู้ใช้เลือกได้ มาตรฐานYes, NoหรือCancelคำถามประเภท ฉันจะทำสิ่งนี้ให้สำเร็จได้ในพรอมต์ทุบตีทั่วไป
1443 linux  bash  shell  scripting 

23
วิธีการนับบรรทัดในเอกสาร?
ฉันมีเส้นแบบนี้และฉันอยากรู้ว่าฉันมีหลายเส้นจริง ๆ ... 09:16:39 AM all 2.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 94.00 09:16:40 AM all 5.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 91.00 09:16:41 AM all 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 96.00 09:16:42 AM all 3.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 …

21
ฉันจะประกาศและใช้ตัวแปรบูลีนในเชลล์สคริปต์ได้อย่างไร
ฉันพยายามประกาศตัวแปรบูลีนในเชลล์สคริปต์โดยใช้ไวยากรณ์ต่อไปนี้: variable=$false variable=$true ถูกต้องหรือไม่ นอกจากนี้หากฉันต้องการอัปเดตตัวแปรนั้นฉันจะใช้ไวยากรณ์เดียวกันหรือไม่ ในที่สุดเป็นไวยากรณ์ต่อไปนี้สำหรับการใช้ตัวแปรบูลีนเป็นนิพจน์ที่ถูกต้อง? if [ $variable ] if [ !$variable ]
978 bash  shell  scripting  boolean  sh 

7
ในสคริปต์ Bash ฉันจะออกจากสคริปต์ทั้งหมดได้อย่างไรหากมีเงื่อนไขบางประการเกิดขึ้น
ฉันกำลังเขียนสคริปต์ใน Bash เพื่อทดสอบโค้ด อย่างไรก็ตามดูเหมือนว่าโง่ที่จะทำการทดสอบหากการคอมไพล์โค้ดล้มเหลวตั้งแต่แรกซึ่งในกรณีนี้ฉันจะยกเลิกการทดสอบ มีวิธีที่ฉันสามารถทำได้โดยไม่ต้องห่อทั้งสคริปต์ในขณะที่ห่วงและใช้ตัวแบ่ง? บางสิ่งบางอย่างเหมือนdun dun dun goto?

14
วิธีเรียกใช้สคริปต์ PowerShell
ฉันจะเรียกใช้สคริปต์ PowerShell ได้อย่างไร ฉันมีสคริปต์ชื่อ myscript.ps1 ฉันติดตั้งเฟรมเวิร์กที่จำเป็นทั้งหมดแล้ว ฉันตั้งสิ่งนโยบายการดำเนินการที่ ฉันได้ปฏิบัติตามคำแนะนำในหน้าช่วยเหลือ MSDN นี้ แล้วและพยายามเรียกใช้เช่นนั้น: powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'(มีหรือไม่มี--noexit) ซึ่งจะส่งคืนอะไรเลยยกเว้นว่าชื่อไฟล์เป็นผลลัพธ์ ไม่มีข้อผิดพลาดไม่มีข้อความไม่มีอะไรเลย โอ้เมื่อฉันเพิ่ม-noexitสิ่งเดียวกันจะเกิดขึ้น แต่ฉันยังคงอยู่ใน PowerShell และต้องออกด้วยตนเอง ไฟล์. ps1 ควรจะเรียกใช้โปรแกรมและส่งคืนระดับข้อผิดพลาดขึ้นอยู่กับเอาต์พุตของโปรแกรมนั้น แต่ฉันค่อนข้างแน่ใจว่าฉันยังไม่ได้ไปถึงที่นั่น ผมทำอะไรผิดหรือเปล่า?

8
“ cat << EOF” ทำงานอย่างไรในการทุบตี?
ฉันต้องการเขียนสคริปต์เพื่อป้อนอินพุตหลายบรรทัดไปยังโปรแกรม ( psql) หลังจาก googling ไปเล็กน้อยฉันพบว่าไวยากรณ์ต่อไปนี้ใช้งานได้: cat &lt;&lt; EOF | psql ---params BEGIN; `pg_dump ----something` update table .... statement ...; END; EOF นี้ได้อย่างถูกต้องสร้างสตริงหลายคู่สาย (จากBEGIN;การEND;รวม) และท่อมันเป็น input psqlไปยัง แต่ฉันไม่รู้ว่ามันทำงานได้ยังไงบางคนช่วยอธิบายหน่อยได้ไหม? ฉันหมายถึงส่วนใหญ่cat &lt;&lt; EOFฉันรู้ว่าการ&gt;ส่งออกไปยังไฟล์&gt;&gt;ผนวกกับไฟล์&lt;อ่านอินพุตจากไฟล์ ทำอะไร&lt;&lt;กันแน่ และมีหน้าคนสำหรับมันหรือไม่?
629 linux  bash  scripting  heredoc 

23
ฉันจะรู้ชื่อไฟล์สคริปต์ในสคริปต์ Bash ได้อย่างไร
ฉันจะกำหนดชื่อของไฟล์สคริปต์ Bash ภายในสคริปต์ได้อย่างไร เช่นถ้าสคริปต์ของฉันอยู่ในไฟล์runme.shฉันจะทำให้มันแสดงข้อความ "คุณกำลังเรียกใช้ runme.sh" ได้อย่างไรโดยไม่ต้องใช้ hardcoding
605 linux  bash  shell  scripting 

14
sudo echo“ something” >> / etc / privilegedFile ไม่ทำงาน
นี่เป็นคำถามที่ค่อนข้างง่ายอย่างน้อยก็น่าจะเป็นไปได้เกี่ยวกับการอนุญาต sudo ใน Linux มีหลายครั้งที่ฉันแค่อยากจะต่อท้าย/etc/hostsไฟล์หรือไฟล์ที่คล้ายกัน แต่ท้ายที่สุดก็ไม่สามารถทำได้เพราะทั้งคู่&gt;และ&gt;&gt;ไม่ได้รับอนุญาตแม้แต่กับรูท มีบางประการเพื่อให้งานนี้ได้โดยไม่ต้องsuหรือsudo suเข้าสู่ราก?

10
วิธีการตั้งค่าไดเรกทอรีการทำงานปัจจุบันไปยังไดเรกทอรีของสคริปต์หรือไม่
ฉันกำลังเขียนสคริปต์ทุบตี ฉันต้องการไดเรกทอรีการทำงานปัจจุบันเป็นไดเรกทอรีที่สคริปต์ตั้งอยู่เสมอ พฤติกรรมเริ่มต้นคือไดเรกทอรีการทำงานปัจจุบันในสคริปต์เป็นของเชลล์ที่ฉันเรียกใช้ แต่ฉันไม่ต้องการพฤติกรรมนี้
569 bash  path  scripting 

6
ฉันจะรับ cURL เพื่อไม่แสดงแถบความคืบหน้าได้อย่างไร
ฉันพยายามใช้ cURL ในสคริปต์และทำให้มันไม่แสดงแถบความคืบหน้า ฉันได้พยายาม-s, -silent, -Sและ-quietตัวเลือก แต่ไม่มีของพวกเขาทำงาน นี่เป็นคำสั่งทั่วไปที่ฉันได้ลอง: curl -s http://google.com &gt; temp.html ฉันเพิ่งได้รับแถบความคืบหน้าเมื่อกดไปที่ไฟล์ดังนั้นจึงcurl -s http://google.comไม่มีแถบความคืบหน้า แต่curl -s http://google.com &gt; temp.htmlจะมี
562 linux  bash  unix  scripting  curl 

14
ค้นหาและแทนที่ภายในไฟล์ข้อความจากคำสั่ง Bash
วิธีที่ง่ายที่สุดในการค้นหาและแทนที่สตริงอินพุตที่ระบุพูดabcและแทนที่ด้วยสตริงอื่นคือพูดXYZในไฟล์/tmp/file.txt? ฉันกำลังเขียนแอพและใช้ IronPython เพื่อดำเนินการคำสั่งผ่าน SSH - แต่ฉันไม่รู้จัก Unix ที่ดีและไม่รู้ว่าจะหาอะไร ฉันได้ยินมาว่า Bash นอกเหนือจากการเป็นอินเตอร์เฟสบรรทัดคำสั่งอาจเป็นภาษาสคริปต์ที่ทรงพลังมาก ดังนั้นถ้าเป็นจริงฉันคิดว่าคุณสามารถทำสิ่งเหล่านี้ได้ ฉันสามารถทำได้ด้วยการทุบตีและสคริปต์ (บรรทัดเดียว) ที่ง่ายที่สุดในการบรรลุเป้าหมายของฉันคืออะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.