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

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

6
วิธีย้ายไฟล์ x ไฟล์แรก
ฉันมีโฟลเดอร์ใหญ่นี้ที่มีไฟล์เรียงลำดับหลายพันไฟล์ เป็นไปได้ไหมที่จะย้าย 5000s แรกไปยังโฟลเดอร์ย่อยผ่านmvคำสั่ง? ตอนนี้ฉันย้ายไฟล์ด้วย mv *some_pattern* ./subfolder1/ สำหรับตอนนี้ฉันย้ายภาพไปมาโดยการสุ่มมันไม่สำคัญจริงๆถ้ามีไฟล์ไม่ถึง 5,000 ไฟล์ในแต่ละโฟลเดอร์ย่อย มีวิธีที่ดีกว่าที่จะทำหรือไม่

5
ฉันจะกำหนดค่าที่แตกต่างให้กับตัวแปรได้อย่างไรโดยขึ้นอยู่กับตัวแปรอื่น?
ฉันจะทำให้เชลล์สคริปต์สั้นลงได้อย่างไร CODE="A" if test "$CODE" = "A" then PN="com.tencent.ig" elif test "$CODE" = "a" then PN="com.tencent.ig" elif test "$CODE" = "B" then PN="com.vng.pubgmobile" elif test "$CODE" = "b" then PN="com.vng.pubgmobile" elif test "$CODE" = "C" then PN="com.pubg.krmobile" elif test "$CODE" = "c" then PN="com.pubg.krmobile" elif test "$CODE" = "D" then …

1
ทำไม -a ใน“ #! / bin / sh -a” ส่งผลกระทบต่อ sed และ“ set -a” ไม่?
ถ้าฉันเรียกใช้ไฟล์. sh ต่อไปนี้: #!/bin/sh -a echo "a" | sed -e 's/[\d001-\d008]//g' ผลลัพธ์เป็นข้อผิดพลาด: sed: -e นิพจน์ # 1, อักขระ 18: ช่วงสิ้นสุดไม่ถูกต้อง แต่ถ้าฉันเรียกใช้ไฟล์. sh ต่อไปนี้: #!/bin/sh set -a echo "a" | sed -e 's/[\d001-\d008]//g' มันทำงานโดยไม่มีข้อผิดพลาด รหัสที่สองไม่ควรจะเทียบเท่ากับรหัสแรก? ทำไมข้อผิดพลาดในอันแรก?

1
POSIX ต้องการอะไรสำหรับเอกสารที่ยกมาที่นี่ภายในการทดแทนคำสั่ง?
ในคำถามนี้มีคนรายงานปัญหาการใช้ที่นี่เอกสารด้วยคำคั่นอ้างภายใน$(...)แทนคำสั่งที่เครื่องหมาย\ที่ท้ายบรรทัดภายในการเรียกเอกสารการขึ้นบรรทัดใหม่เข้าสู่เส้นต่อเนื่องขณะเดียวกันที่นี่เอกสารนอกงานคำสั่งเปลี่ยนตัวตามที่คาดไว้ . นี่คือตัวอย่างเอกสารที่ง่ายขึ้น: cat <<'EOT' abc ` def ghi \ jkl EOT ซึ่งรวมถึง backtick หนึ่งรายการและแบ็กสแลชหนึ่งรายการที่ท้ายบรรทัด ตัวคั่นถูกยกมาดังนั้นจึงไม่มีการขยายเกิดขึ้นภายในร่างกาย ใน Bourne-alikes ทั้งหมดฉันสามารถค้นหาผลลัพธ์นี้เป็นคำต่อคำเนื้อหา หากฉันวางเอกสารเดียวกันไว้ภายในการทดแทนคำสั่งดังนี้: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" จากนั้นพวกเขาจะไม่ทำงานเหมือนกันอีกต่อไป: dash, ash, zsh, ksh93, BusyBox ash, mkshและ SunOS 5.10 POSIX shทั้งหมดให้เนื้อหาคำต่อคำของเอกสารเป็นมาก่อน Bash 3.2 ให้ข้อผิดพลาดทางไวยากรณ์สำหรับ backtick ที่ไม่ตรงกัน ด้วย …

3
จะทดสอบการเข้าถึงไฟล์โดยไม่รุกรานได้อย่างไร?
ในเชลล์สคริปต์ฉันจะทดสอบการเข้าถึงการเขียนไฟล์อย่างง่าย ๆ โดยไม่ต้องทำการบุกรุกโดยไม่ต้องพยายามแก้ไขไฟล์ได้อย่างไร? ฉันสามารถแยกเอาท์พุทของstatแต่ดูเหมือนว่าซับซ้อนจริง ๆ และอาจเปราะแม้ว่าฉันไม่แน่ใจว่าผลลัพธ์สถิติแตกต่างกันในการใช้งานและเวลา ฉันสามารถต่อท้ายไฟล์และดูว่าประสบความสำเร็จ แต่อาจเป็นอันตรายได้ด้วยเหตุผลสองประการที่ฉันนึกถึง: ตอนนี้ฉันต้องลบการเพิ่มออกและในกรณีที่กระบวนการอื่นเขียนลงไฟล์สิ่งนี้จะกลายเป็นเรื่องไม่สำคัญเพราะบรรทัดของฉันไม่ได้เป็นกระบวนการสุดท้ายอีกต่อไป กระบวนการใด ๆ ที่อ่านไฟล์อาจมีข้อกำหนดตามอำเภอใจในเนื้อหาของไฟล์นั้นและฉันอาจทำให้แอปพลิเคชันนั้นเสียหาย

4
ฉันจะรอโปรแกรมที่เริ่มต้นในเชลล์อื่นได้อย่างไร
ฉันมีโปรแกรมที่ทำงานจำนวนมาก (ใช้เวลาประมาณ 4-5 ชั่วโมง) ที่เริ่มทำงานโดย cron เมื่อข้อมูลทั้งหมดที่ใช้งานได้นั้นพร้อมใช้งาน บางครั้งเมื่อฉันรอให้เสร็จฉันต้องการให้โปรแกรมอื่น (โต้ตอบ) เริ่มทำงานเมื่อเสร็จสิ้น การรอสายดูดี แต่จะรอให้เด็ก ๆ

7
ไบนารีฐานสิบหกและทศนิยมในเชลล์สคริปต์
ฉันมีบริบทที่ฉันต้องแปลงเลขฐานสองเป็นเลขฐานสิบหกและทศนิยมและ viceversa ในเชลล์สคริปต์ มีคนแนะนำฉันเป็นเครื่องมือสำหรับสิ่งนี้ได้ไหม

5
มีวิธีการรวมขนาดไฟล์ที่ระบุไว้หรือไม่?
นี่คือคำสั่งที่ฉันใช้เพื่อแสดงรายการไฟล์: find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \; -rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys -rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys และอื่น ๆ …


1
ข้อผิดพลาดของไวยากรณ์: จุดสิ้นสุดไฟล์ที่ไม่คาดคิด - สคริปต์ทุบตี [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังพยายามสร้างแอป spritz ทุกอย่างทำงานได้ดี แต่ตั้งแต่เมื่อวานฉันได้รับข้อผิดพลาดนี้: ./spritz: บรรทัด 176: ข้อผิดพลาดทางไวยากรณ์: จุดสิ้นสุดไฟล์ที่ไม่คาดคิด ฉันตรวจสอบไฟล์สคริปต์แล้วและดูเหมือนว่าทุกอย่างจะสมบูรณ์แบบ ฉันสับสนฉันมีคำสั่ง if ในที่สุดและมันก็ดูถูกต้อง! นี่คือส่วนสุดท้าย: #checks if speed is 150 157 if [[ $2 -eq 150 ]]; 158 then 159 starttime=$SECONDS 160 FS=$'\n' 161 for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`; 162 do …

6
สร้าง ID เฉพาะของเครื่องที่สอดคล้องกัน
เราสามารถสร้าง id ที่ไม่ซ้ำกันสำหรับพีซีแต่ละเครื่องเช่น uuuidgen แต่มันจะไม่เปลี่ยนแปลงเว้นแต่จะมีการเปลี่ยนแปลงฮาร์ดแวร์หรือไม่? ฉันกำลังคิดเกี่ยวกับการรวม CPUID และ MACADDR และแฮชพวกเขาเพื่อสร้าง ID ที่สอดคล้องกัน แต่ฉันไม่มีความคิดวิธีแยกวิเคราะห์พวกเขาโดยใช้ bash script สิ่งที่ฉันรู้คือฉันจะได้รับ CPUID จาก dmidecode -t 4 | grep ID และ ifconfig | grep ether จากนั้นฉันต้องรวมสตริง hex เหล่านั้นและแฮชใช้ sha1 หรือ md5 เพื่อสร้างสตริง hex ความยาวคงที่ ฉันจะแยกวิเคราะห์ผลลัพธ์นั้นได้อย่างไร

4
แยกเอาท์พุทยาวเป็นสองคอลัมน์
มียูทิลิตี้หรือสคริปต์ง่าย ๆ ที่จะจัดเรียงผลลัพธ์จากหนึ่งในสคริปต์ของฉันหรือไม่ ฉันมีข้อมูลในบางรูปแบบ: A aldkhasdfljhaf B klajsdfhalsdfh C salkjsdjkladdag D lseuiorlhisnflkc E sdjklfhnslkdfhn F kjhnakjshddnaskjdh แต่ถ้าสิ่งนี้กลายเป็นสองความยาวให้เขียนข้อมูลในรูปแบบต่อไปนี้ (ซึ่งยังคงเรียงตามแนวตั้ง): A aldkhasdfljhaf D lseuiorlhisnflkc B klajsdfhalsdfh E sdjklfhnslkdfhn C salkjsdjkladdag F kjhnakjshddnaskjdh จากการอ่าน manpage ฉันไม่คิดว่านี่จะเป็นสิ่งcolumnที่เหมาะสม แต่ฉันไม่แน่ใจ มันง่ายที่จะแยกในรูปแบบ: A B C D E F โดยพิมพ์เฉพาะ\nทุกบรรทัดที่สอง (สิ่งที่สคริปต์ปัจจุบันของฉันทำ) ความคิดใด ๆ ขอบคุณ!

6
เชลล์สคริปต์เพื่อสร้างไฟล์หากไม่มีอยู่?
ฉันจำเป็นต้องสร้างเชลล์สคริปต์ที่ตรวจสอบการมีอยู่ของไฟล์และหากไม่มีอยู่ให้สร้างและย้ายไปยังคำสั่งถัดไปหรือเพียงแค่ย้ายไปยังคำสั่งถัดไป สิ่งที่ฉันไม่ได้ทำ #!/bin/bash # Check for the file that gets created when the script successfully finishes. if [! -f /Scripts/file.txt] then : # Do nothing. Go to the next step? else mkdir /Scripts # file.txt will come at the end of the script fi # Next command (macOS preference setting) …
20 bash  shell-script  osx 

3
วิธี“ เหมาะสม” ในการรันเชลล์สคริปต์เป็น daemon
ฉันจะเขียนสคริปต์เชลล์ที่ผมอยากจะทำงานเป็นภูตในการเริ่มต้นโดยไม่ต้องใช้เครื่องมือภายนอกเช่นdaemontoolsหรือ daemonize Linux Daemon การเขียน HOWTO ตามที่ลินุกซ์ภูตเขียน HOWTOที่เหมาะสมภูตมีลักษณะดังต่อไปนี้: ส้อมจากกระบวนการหลัก ปิดทั้งหมดอธิบายไฟล์ (เช่นstdin, stdout, stderr) เปิดบันทึกสำหรับการเขียน (ถ้ากำหนดค่า) เปลี่ยนไดเรกทอรีการทำงานอย่างใดอย่างหนึ่งที่เป็นถาวร (ปกติ/) รีเซ็ตหน้ากากโหมดไฟล์ (umask) สร้างSession ID ที่ไม่ซ้ำกัน(SID) daemonizeบทนำ daemonizeบทนำไปไกลระบุว่าภูตทั่วไปเพิ่มเติม: ยกเลิกการเชื่อมโยงจากเทอร์มินัลการควบคุม (หากมี) และจะละเว้นสัญญาณเทอร์มินัลทั้งหมด ยกเลิกการเชื่อมโยงจากกลุ่มกระบวนการ จับ SIGCLD ฉันจะทำทั้งหมดนี้ในsh, dashหรือbashสคริปต์ด้วยเครื่องมือลินุกซ์ร่วมกันเท่านั้น? สคริปต์ควรสามารถทำงานบน distros ได้มากที่สุดโดยไม่ต้องมีซอฟต์แวร์เพิ่มเติมแม้ว่าDebianจะเป็นจุดสนใจหลักของเรา หมายเหตุ:ฉันรู้ว่ามีคำตอบมากมายในเครือข่ายStackExchange ที่แนะนำให้ใช้nohupหรือsetsidแต่วิธีการเหล่านี้ไม่ได้จัดการข้อกำหนดทั้งหมดข้างต้น แก้ไข: ภูต (7) manpageยังช่วยให้คำแนะนำบางส่วนแม้ดูเหมือนจะมีความแตกต่างบางอย่างระหว่างแบบเก่าSysVภูตและใหม่กว่าsystemdคน เนื่องจากความเข้ากันได้กับความหลากหลายของ distros เป็นสิ่งสำคัญโปรดตรวจสอบให้แน่ใจว่าคำตอบนั้นชัดเจนแตกต่างกัน

4
dirname และ basename เทียบกับการขยายพารามิเตอร์
มีเหตุผลใดที่จะชอบอีกรูปแบบหนึ่งหรือไม่ ประสิทธิภาพความน่าเชื่อถือความสะดวกในการพกพา? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" ผลิต: /some/long/path/to /some/long/path/to a_file a_file (v1 ใช้การขยายพารามิเตอร์เชลล์ v2 ใช้ไบนารีภายนอก)

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