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

สำหรับคำถามเกี่ยวกับสคริปต์ที่เขียนขึ้นสำหรับเชลล์คำสั่ง Bash สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาด / ข้อผิดพลาดทางไวยากรณ์โปรดตรวจสอบด้วยโปรแกรม shellcheck (หรือในเซิร์ฟเวอร์ shellcheck เว็บที่ https://shellcheck.net) ก่อนโพสต์ที่นี่ คำถามเกี่ยวกับการใช้งานอินเทอร์แอคทีฟของ Bash นั้นมีแนวโน้มที่จะอยู่ในหัวข้อของผู้ใช้ขั้นสูงมากกว่าในสแต็คโอเวอร์โฟลว์

16
วิธีการจัดเรียงอาร์เรย์ใน Bash
ฉันมีอาร์เรย์ใน Bash ตัวอย่างเช่น: array=(a c b f 3 5) ฉันต้องการเรียงลำดับของอาร์เรย์ ไม่เพียงแสดงเนื้อหาในวิธีเรียงลำดับ แต่เพื่อรับอาร์เรย์ใหม่ที่มีองค์ประกอบเรียงลำดับ อาร์เรย์ที่เรียงลำดับใหม่สามารถเป็นอาร์เรย์ใหม่ที่สมบูรณ์หรืออาร์เรย์เก่าได้
139 arrays  bash  shell  sorting 

7
Bash / sh - ความแตกต่างระหว่าง && และ;
ผมปกติใช้;ในการรวมคำสั่งมากกว่าหนึ่งในสาย &&แต่บางคนชอบ มีความแตกต่างกันหรือไม่? ตัวอย่างเช่นcd ~; cd -และcd ~ && cd -ดูเหมือนว่าจะทำสิ่งเดียวกัน รุ่นใดพกพาสะดวกกว่าเช่นจะรองรับ bash-subset เช่นเปลือกของ Android หรือไม่

4
ฉันจะใช้การเปรียบเทียบ grep ไฟล์ใน bash if / else ได้อย่างไร
เมื่อเซิร์ฟเวอร์ของเราเกิดขึ้นเราจำเป็นต้องตรวจสอบไฟล์เพื่อดูว่ามีการกำหนดค่าเซิร์ฟเวอร์อย่างไร เราต้องการค้นหาสตริงต่อไปนี้ในไฟล์ /etc/aws/hosts.conf ของเรา: MYSQL_ROLE=master จากนั้นเราต้องการทดสอบว่าสตริงนั้นมีอยู่หรือไม่และใช้คำสั่ง if / else เพื่อรันหนึ่งในสองตัวเลือกขึ้นอยู่กับว่าสตริงนั้นมีอยู่หรือไม่ ไวยากรณ์ BASH ของคำสั่ง if คืออะไร if [ ????? ]; then #do one thing else #do another thing fi
138 bash 

8
ฉันจะใช้ grep เพื่อค้นหาไดเรกทอรีปัจจุบันสำหรับไฟล์ทั้งหมดที่มีสตริง“ hello” แต่แสดงเฉพาะไฟล์. h และ. cc ได้อย่างไร
ฉันจะใช้ grep เพื่อค้นหาไดเรกทอรีปัจจุบันสำหรับไฟล์ใด ๆ และทั้งหมดที่มีสตริง "hello" และแสดงเฉพาะไฟล์. h และ. cc ได้อย่างไร
138 linux  bash  unix  grep 


10
เรียงไฟล์ข้อความตามความยาวบรรทัดรวมถึงช่องว่าง
ฉันมีไฟล์ CSV ที่มีลักษณะเช่นนี้ AS2345, ASDF1232, ตัวอย่างนายธรรมดา, 110 Binary ave., แอตแลนติส, RI, 12345, (999) 123-5555,1.56 AS2345, ASDF1232 นางตัวอย่างธรรมดา 1121110 Ternary st. 110 Binary ave .. , Atlantis, RI, 12345, (999) 123-5555,1.56 AS2345, ASDF1232, ตัวอย่างนายธรรมดา, 110 Binary ave., Liberty City, RI, 12345, (999) 123-5555,1.56 AS2345, ASDF1232, ตัวอย่างนายธรรมดา, 110 Ternary ave., บางเมือง, RI, …
137 bash  sorting  text  awk 

3
การจำลองลูป do-while ใน Bash
วิธีที่ดีที่สุดในการเลียนแบบลูป do-while ใน Bash คืออะไร ฉันสามารถตรวจสอบเงื่อนไขก่อนที่จะเข้าสู่whileลูปและจากนั้นทำการตรวจสอบเงื่อนไขในลูปอีกครั้ง แต่นั่นเป็นรหัสซ้ำ มีวิธีที่สะอาดกว่านี้ไหม? รหัสหลอกของสคริปต์ของฉัน: while [ current_time <= $cutoff ]; do check_if_file_present #do other stuff done สิ่งนี้จะไม่ทำงานcheck_if_file_presentหากเปิดตัวหลังจากผ่านไป$cutoffระยะเวลาหนึ่งและสิ่งที่ต้องทำในขณะนั้น
137 bash  loops  do-while 

14
ฉันจะตรวจสอบว่าตัวแปรมีอยู่ในรายการใน BASH ได้อย่างไร
ฉันพยายามเขียนสคริปต์ใน bash ที่ตรวจสอบความถูกต้องของอินพุตของผู้ใช้ ฉันต้องการจับคู่อินพุต (พูดตัวแปรx) กับรายการค่าที่ถูกต้อง สิ่งที่ฉันเกิดขึ้นในขณะนี้คือ: for item in $list do if [ "$x" == "$item" ]; then echo "In the list" exit fi done คำถามของฉันคือถ้ามีวิธีที่ง่ายกว่าในการทำสิ่งนี้ เช่นlist.contains(x)ภาษาโปรแกรมภาษา เพิ่มเติม: พูดรายการคือ: list="11 22 33" รหัสของฉันจะสะท้อนข้อความสำหรับค่าเหล่านั้นเท่านั้นเนื่องจากlistถือว่าเป็นอาร์เรย์และไม่ใช่สตริงการจัดการสตริงทั้งหมดจะตรวจสอบความถูกต้อง1ในขณะที่ฉันต้องการให้มันล้มเหลว
137 linux  bash 

2
วิธีการคัดลอกทุบตีไดเรกทอรีและไฟล์ทั้งหมดซ้ำ?
ฉันมีสคริปต์: find ./SourceFolder/ -maxdepth 4 -exec cp -R '{}' ./DestFolder/ \; SourceDir มีโฟลเดอร์ย่อยด้วย ปัญหาที่เกิดขึ้นDestFolderไม่เพียง แต่ในทรีทั้งหมด แต่อยู่ในระดับที่สูงขึ้นอีกระดับและไฟล์ทั้งหมด จะแก้ไขอย่างไร
137 bash  copy  directory 

5
ฉันจะเปลี่ยน bash history เสร็จสิ้นเพื่อทำสิ่งที่มีอยู่แล้วได้อย่างไร
ฉันพบคำสั่งเมื่อสองสามเดือนก่อนที่ทำให้ประวัติ bash ของฉันสมบูรณ์โดยอัตโนมัติในสิ่งที่มีอยู่แล้วในบรรทัดเมื่อกดลูกศรขึ้น: $ vim fi กด ↑ $ vim file.py ฉันต้องการตั้งค่านี้ในคอมพิวเตอร์เครื่องใหม่ของฉันเพราะจะช่วยประหยัดเวลาได้มากในการเก็บประวัติที่ยิ่งใหญ่ ปัญหาคือฉันจำไม่ได้ตลอดชีวิตว่ามีการพูดถึงที่ไหนและการอ่านข้อมูลอ้างอิงและแบบฝึกหัดทุบตีที่ไม่มีที่สิ้นสุดก็ไม่ได้ช่วยอะไรเช่นกัน ไม่มีใครรู้คำสั่ง?
136 linux  bash  shell 

16
เรียกใช้งาน cron เฉพาะในกรณีที่ยังไม่ได้ทำงาน
ดังนั้นฉันจึงพยายามตั้งค่างาน cron เป็นสุนัขเฝ้าบ้านสำหรับภูตที่ฉันสร้างขึ้น หาก daemon เกิดข้อผิดพลาดและล้มเหลวฉันต้องการให้งาน cron เริ่มต้นใหม่เป็นระยะ ... ฉันไม่แน่ใจว่าจะเป็นไปได้อย่างไร แต่ฉันอ่านบทแนะนำ cron สองสามข้อและไม่พบสิ่งใดที่จะทำในสิ่งที่ฉัน 'ฉันกำลังมองหา ... daemon ของฉันเริ่มต้นจากเชลล์สคริปต์ดังนั้นฉันแค่มองหาวิธีเรียกใช้งาน cron เท่านั้นหากการรันงานก่อนหน้านั้นยังไม่ทำงาน ฉันพบโพสต์นี้ซึ่งให้คำตอบสำหรับสิ่งที่ฉันพยายามทำโดยใช้ไฟล์ล็อคไม่ใช่ฉันไม่แน่ใจว่ามีวิธีที่ดีกว่านี้หรือไม่ ... ขอบคุณสำหรับความช่วยเหลือของคุณ.
136 linux  bash  cron  watchdog 

4
ตัวดำเนินการความเท่าเทียมกันของ Bash (==, -eq)
ใครจะกรุณาอธิบายความแตกต่างระหว่าง-eqและ==ในการเขียนสคริปต์ทุบตี? มีความแตกต่างระหว่างสิ่งต่อไปนี้หรือไม่? [ $a -eq $b ] และ [ $a == $b ] มัน==ใช้เฉพาะเมื่อตัวแปรมีตัวเลขหรือไม่?
136 bash 

3
bash กำหนดค่าเริ่มต้น
$ {พารามิเตอร์: = word} กำหนดค่าเริ่มต้น หากพารามิเตอร์ไม่ได้ตั้งค่าหรือว่างการขยายของคำจะถูกกำหนดให้กับพารามิเตอร์ จากนั้นค่าของพารามิเตอร์จะถูกแทนที่ ไม่สามารถกำหนดพารามิเตอร์ตำแหน่งและพารามิเตอร์พิเศษด้วยวิธีนี้ ฉันคิดว่าฉันสามารถใช้คุณสมบัตินี้ในการเขียน${LONG_VARIABLE_NAME:=hello}แทนการใช้งานได้นานขึ้นLONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}แต่ตอนนี้ bash ก็พยายามเรียกใช้ 'hello' และไม่พบคำสั่ง วิธีใดที่จะหลีกเลี่ยงสิ่งนั้น? หรือจะต้องติดที่หลัง? ใครสามารถยกตัวอย่างได้ว่าค่าเริ่มต้นของการกำหนดมีประโยชน์จริงหรือไม่?
135 bash 

6
อะไรคือความแตกต่างระหว่าง $ {var},“ $ var” และ“ $ {var}” ใน Bash shell?
อะไรชื่อกล่าวว่า: สิ่งที่ไม่ได้หมายถึงการแค็ปซูลตัวแปรใน{}, ""หรือ"{}?" ผมยังไม่ได้รับสามารถที่จะหาคำอธิบายใด ๆ ออนไลน์เกี่ยวกับเรื่องนี้ - ฉันไม่ได้รับสามารถที่จะหมายถึงพวกเขายกเว้นสำหรับการใช้สัญลักษณ์ซึ่ง ไม่ให้ผลอะไรเลย นี่คือตัวอย่าง: declare -a groups groups+=("CN=exampleexample,OU=exampleexample,OU=exampleexample,DC=example,DC=com") groups+=("CN=example example,OU=example example,OU=example example,DC=example,DC=com") นี้: for group in "${groups[@]}"; do echo $group done พิสูจน์ได้ว่าแตกต่างจากนี้มาก: for group in $groups; do echo $group done และนี่: for group in ${groups}; do echo $group done สิ่งแรกเท่านั้นที่บรรลุสิ่งที่ฉันต้องการ: เพื่อวนซ้ำผ่านแต่ละองค์ประกอบในอาร์เรย์ ฉันไม่ได้จริงๆที่ชัดเจนเกี่ยวกับความแตกต่างระหว่าง$groups, "$groups", และ${groups} …
135 bash  shell  variables  syntax 

24
Bash Templating: จะสร้างไฟล์คอนฟิกจากเทมเพลตด้วย Bash ได้อย่างไร?
ฉันกำลังเขียนสคริปต์เพื่อสร้างไฟล์กำหนดค่าอัตโนมัติสำหรับ Apache และ PHP สำหรับเว็บเซิร์ฟเวอร์ของฉันเอง ฉันไม่ต้องการใช้ GUI ใด ๆ เช่น CPanel หรือ ISPConfig ฉันมีเทมเพลตของไฟล์กำหนดค่า Apache และ PHP สคริปต์ Bash จำเป็นต้องอ่านเทมเพลตทำการแทนที่ตัวแปรและเทมเพลตที่แยกวิเคราะห์เอาต์พุตในบางโฟลเดอร์ วิธีที่ดีที่สุดคืออะไร? ฉันคิดได้หลายวิธี วิธีไหนดีที่สุดหรืออาจมีวิธีที่ดีกว่านั้นบ้าง ฉันต้องการทำแบบนั้นด้วย Bash ล้วนๆ (ตัวอย่างเช่น PHP ทำได้ง่าย) 1) จะแทนที่ตัวยึดตำแหน่ง $ {} ในไฟล์ข้อความได้อย่างไร template.txt: the number is ${i} the word is ${word} script.sh: #!/bin/sh #set variables i=1 word="dog" #read …

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