คำถามติดแท็ก shell-script

คำถามเกี่ยวกับเชลล์สคริปต์ไฟล์เรียกทำงานที่ตีความโดยเชลล์ (bash, zsh ฯลฯ )


1
ใน Bash แล้วถ้า [-z“ $ 1”] และถ้า [“ $ 1” =“”] เหมือนกันล่ะ
ในการสคริปต์เชลล์ Bash ความแตกต่าง (ถ้ามี) ระหว่างสองข้อความต่อไปนี้คืออะไร? 1. ) if [ -z "$1" ] 2. ) if [ "$1" = "" ] ฉันพบว่าตัวเองเขียนบทที่สองในบางบท แต่จากนั้นฉันอ่านที่นี่ว่าการใช้-zประสบความสำเร็จในสิ่งเดียวกัน หากมีปัญหาในการใช้อันที่สองเราควรเพิกเฉยที่อันแรกดูดีขึ้นเล็กน้อยหรือไม่

9
สำหรับ vs find in Bash
เมื่อวนลูปผ่านไฟล์มีสองวิธี: ใช้for-loop: for f in *; do echo "$f" done ใช้find: find * -prune | while read f; do echo "$f" done สมมติว่าทั้งสองจะได้พบกับลูปในรายการเดียวกันของไฟล์สิ่งที่มีความแตกต่างในทั้งสองตัวเลือกในperfomanceและการจัดการ?

7
แปลงขีดล่างเป็น PascalCase เช่น UpperCamelCase
หากฉันมีสตริงที่มีลักษณะเช่นนี้: "this_is_the_string" ภายในสคริปต์ทุบตีฉันต้องการแปลงเป็น PascalCase เช่น UpperCamelCase ให้มีลักษณะดังนี้: "ThisIsTheString" ฉันพบว่าการแปลงเป็น lowerCamelCase สามารถทำได้ดังนี้: "this_is_the_string" | sed -r 's/([a-z]+)_([a-z])([a-z]+)/\1\U\2\L\3/' น่าเสียดายที่ฉันไม่คุ้นเคยกับ regexes ที่จะแก้ไขสิ่งนี้

14
Bash script เพื่อแปลง * flac ทั้งหมดเป็น * .mp3 ด้วย FFmpeg?
ฉันต้องการแปลง * .flac ทั้งหมดเป็น * .mp3 ในโฟลเดอร์เฉพาะ นี่คือสิ่งที่ฉันได้ลอง แต่ไม่ได้ผล: # change to the home directory cd ~/music # convert all *.flac files ffmpeg -i *.flac -acodec libmp3lame *.mp3 # (optional: check whether there are any errors printed on the terminal) sleep 60 จะได้รับเป้าหมายของฉันได้อย่างไร

2
ความแตกต่างระหว่างเครื่องหมายเท่ากับเดียวและสองเท่า (=) ในการเปรียบเทียบเชลล์คืออะไร
อ่านว่าสำหรับการเปรียบเทียบสตริงภายในifเราจำเป็นต้องใช้วงเล็บสองตาราง =หนังสือบางเล่มกล่าวว่าการเปรียบเทียบที่สามารถทำได้โดย แต่มันใช้งานได้ดีด้วย==เช่นกัน #!/bin/bash a="hello" b="world" if [[ $a == $b ]];then echo "equal" fi มีความแตกต่างระหว่าง=และ==ในการเปรียบเทียบหรือไม่

5
ลบช่วงของบรรทัดด้านบนรูปแบบด้วย sed (หรือ awk)
ฉันมีรหัสต่อไปนี้ที่จะลบบรรทัดที่มีรูปแบบbananaและ 2 บรรทัดหลังจากนั้น: sed '/banana/I,+2 d' file จนถึงตอนนี้ดีมาก! แต่ฉันต้องการมันเพื่อลบ 2 บรรทัดก่อนหน้า bananaแต่ฉันไม่สามารถรับมันด้วย "เครื่องหมายลบ" หรืออะไรก็ตาม (คล้ายกับสิ่งที่grep -v -B2 banana fileควรทำ แต่ไม่ได้ทำ): teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file sed: invalid option -- '2' teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file sed: -e expression #1, char 16: unexpected `,' teresaejunior@localhost …

4
ทดสอบว่าตัวแปรว่างในเชลล์สคริปต์หรือไม่
ฉันได้เห็นเทคนิคต่อไปนี้ใช้หลายครั้งในหลาย ๆ เชลล์เพื่อทดสอบว่าตัวแปรว่างเปล่าหรือไม่: if [ "x$1" = "x" ]; then # Variable is empty fi มีข้อได้เปรียบอะไรบ้างในการใช้สิ่งนี้มากกว่าที่ยอมรับมากกว่านี้if [ -z "$1" ]? มันอาจเป็นปัญหาการพกพาหรือไม่?

8
ยูทิลิตี้ของคำสั่ง: ในเชลล์สคริปต์คืออะไรโดยไม่ได้ทำอะไรเลย?
ในคำตอบสำหรับคำถามนี้เกี่ยวกับความคิดเห็นในการเขียนสคริปต์เชลล์จะมีการระบุว่า:คำสั่ง null เป็นคำสั่งที่ไม่ทำอะไรเลยอย่างชัดเจน (แต่ไม่ควรใช้สำหรับความคิดเห็น) สิ่งที่เป็นประโยชน์ของคำสั่งที่ไม่ทำอะไรเลยอย่างแน่นอน?


5
วิธีที่ดีกว่าในการยอมรับรูปแบบของ 'ใช่' จากเชลล์พรอมต์
การทดสอบการใช้งานเชลล์สคริปต์ที่ฉันเขียนพบว่าผู้คนมีความคาดหวังที่แตกต่างกันเกี่ยวกับวิธีตอบคำถามที่คาดหวังว่า 'ใช่' เป็นคำตอบ ดูการเปลี่ยนแปลงในตัวอย่างรหัสด้านล่าง แน่นอนว่าต้องมีวิธีที่ดีกว่าที่ฉันคิดไว้ ของคุณคืออะไรอ่านและรูปแบบสั้นใช้เวลากับเรื่องนี้? read -p 'Answer this question with yes: ' answer if [ "$answer" = 'Y' -o "$answer" = 'YES' -o "$answer" = 'Yes' -o "$answer" = 'y' -o "$answer" = 'yes' -o some-alternate-condition ]; then echo 'Surely this can be written better?' fi

3
“ ในขณะที่:;” หมายถึงอะไร
ฉันรู้ว่าwhileวงคืออะไร อย่างไรก็ตามฉันเพิ่งเห็นว่าทำงานกับ: while [condition] while ![condition] while TRUE (infinite loop) ในกรณีที่คำสั่งหลังจากที่whileจะต้องมีอย่างใดอย่างหนึ่งหรือTRUEFALSE มีคำสั่งเชลล์ builtin :ชื่อเป็น มันอธิบายเป็นคำสั่งหุ่นทำอะไร แต่ผมไม่ทราบว่ามันจะเหมือนกันที่นี่แม้ว่าจะสามารถหรือTRUE FALSEอาจจะเป็นสิ่งที่แตกต่างกัน แต่อะไรนะ?

1
ทำไม“ -” ใน“ #! / bin / sh -” shebang?
#! / bin / sh - (หรืออย่างน้อยเป็น) มักจะแนะนำshebang/bin/shจะมีสคริปต์ตีความโดย ทำไมไม่เพียง#! /bin/shหรือ#!/bin/sh? มีอะไรที่-หา?

4
ถ้ามีอย่างอื่นคำสั่งเทียบเท่ากับตรรกะและ && หรือ || และฉันจะเลือกอันไหนดีกว่ากัน
ฉันเรียนรู้เกี่ยวกับโครงสร้างการตัดสินใจและฉันเจอรหัสเหล่านี้: if [ -f ./myfile ] then cat ./myfile else cat /home/user/myfile fi [ -f ./myfile ] && cat ./myfile || cat /home/user/myfile พวกเขาทั้งสองทำงานเหมือนกัน มีข้อได้เปรียบอะไรบ้างในการใช้งานจากอีกทางหนึ่ง?

2
พฤติกรรมที่ถูกต้องของกับดัก EXIT และ ERR เมื่อใช้ `set -eu`
ฉันสังเกตเห็นพฤติกรรมแปลก ๆ บางอย่างเมื่อใช้set -e( errexit), set -u( nounset) พร้อมกับดัก ERR และ EXIT ดูเหมือนว่าพวกเขาเกี่ยวข้องกันดังนั้นการใส่คำถามเหล่านั้นลงในคำถามเดียวก็สมเหตุสมผล 1) set -uไม่เรียกใช้กับดัก ERR รหัส: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} คาดว่า: มีการเรียกใช้กับดัก ERR, RC! = 0 จริง: ไม่ได้เรียกกับแทร็บ ERR , RC == 1 หมายเหตุ: set -eไม่เปลี่ยนผลลัพธ์ 2) การใช้set -euรหัสออกในกับดักของ EXIT คือ …

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