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

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

4
$ VAR เทียบกับ $ {VAR} และเพื่อพูดหรือไม่พูด
ฉันเขียนได้ VAR=$VAR1 VAR=${VAR1} VAR="$VAR1" VAR="${VAR1}" ผลลัพธ์ที่ได้สำหรับฉันทุกคนดูเหมือนจะเหมือนกัน ทำไมฉันต้องเขียนอย่างใดอย่างหนึ่ง? เหล่านี้ไม่ใช่พกพา / POSIX?

1
ในสคริปต์ทุบตีใช้เงื่อนไข“ หรือ” ในคำสั่ง“ ถ้า”
คำถามนี้เป็นผลสืบเนื่องของแปลกไปของฉันคำถามก่อนหน้านี้ ผู้ใช้ในเว็บไซต์นี้ช่วยฉันในการกำหนดวิธีการเขียน bash forloop ที่วนซ้ำค่าสตริง ตัวอย่างเช่นสมมติว่าการควบคุมวงตัวแปรfnameiterates "a.txt" "b.txt" "c.txt"มากกว่าสตริง ฉันต้องการที่จะecho"ใช่!" เมื่อfnameมีค่า"a.txt"หรือ"c.txt"และecho"ไม่!" มิฉะนั้น. ฉันได้ลอง bash shell script แล้ว: #!/bin/bash for fname in "a.txt" "b.txt" "c.txt" do echo $fname if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then echo "yes!" else echo "no!" fi done ฉันได้รับผลลัพธ์: a.txt ไม่! …
128 bash  shell-script 

1
การอ้างอิงสองครั้งจำเป็นเมื่อใด
คำแนะนำเก่าที่ใช้ในการอ้างอิงสองครั้งนิพจน์ใด ๆ ที่เกี่ยวข้องกับ a $VARIABLE, อย่างน้อยถ้าใครอยากให้มันถูกตีความโดยเชลล์เป็นหนึ่งรายการเดียวมิฉะนั้นช่องว่างใด ๆ ในเนื้อหาของ$VARIABLEจะทิ้งเปลือก อย่างไรก็ตามฉันเข้าใจว่าใน shells รุ่นที่ใหม่กว่านั้นการอ้างสองครั้งไม่จำเป็นอีกต่อไป (อย่างน้อยก็เพื่อจุดประสงค์ที่อธิบายไว้ข้างต้น) ตัวอย่างเช่นในbash: % FOO='bar baz' % [ $FOO = 'bar baz' ] && echo OK bash: [: too many arguments % [[ $FOO = 'bar baz' ]] && echo OK OK % touch 'bar baz' % ls $FOO ls: …

2
backticks (เช่น `cmd`) ในกระสุน sh ถูกเลิกใช้แล้วหรือยัง?
ฉันเคยเห็นความคิดเห็นนี้หลายครั้งใน Unix & Linux เช่นเดียวกับเว็บไซต์อื่น ๆ ที่ใช้วลี "backticks ได้รับการคัดค้าน" ด้วยความเคารพต่อเชลล์เช่น Bash & Zsh คำสั่งนี้เป็นจริงหรือเท็จ?

4
วัตถุประสงค์ของการใช้ shift ในเชลล์สคริปคืออะไร?
ฉันเจอสคริปต์นี้แล้ว: #! /bin/bash if (( $# < 3 )); then echo "$0 old_string new_string file [file...]" exit 0 else ostr="$1"; shift nstr="$1"; shift fi echo "Replacing \"$ostr\" with \"$nstr\"" for file in $@; do if [ -f $file ]; then echo "Working with: $file" eval "sed 's/"$ostr"/"$nstr"/g' $file" > $file.tmp …

7
การใช้ตัวดำเนินการไม่เท่ากันสำหรับการเปรียบเทียบสตริง
ฉันพยายามตรวจสอบว่าPHONE_TYPEตัวแปรมีหนึ่งในสามค่าที่ถูกต้อง if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] || [ "$PHONE_TYPE" != "CISCO" ] then echo "Phone type must be nortel,cisco or nec" exit fi รหัสด้านบนใช้งานไม่ได้สำหรับฉันดังนั้นฉันจึงลองทำสิ่งนี้แทน: if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] || [ "$PHONE_TYPE" == "CISCO" ] then …

5
ฉันสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังล็อกไฟล์และสร้างกระบวนการในเวลาเดียวกันได้หรือไม่?
ฉันสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังล็อกไฟล์และสร้างกระบวนการในเวลาเดียวกันได้หรือไม่? กล่าวอีกนัยหนึ่งฉันสามารถทำสิ่งนี้ได้ไหม nohup java -jar myProgram.jar 2>&1 > output.log & หรือว่าไม่ใช่คำสั่งทางกฎหมาย? หรือฉันต้องย้ายมันไปที่พื้นหลังด้วยตนเองเช่น: java -jar myProgram.jar 2>$1 > output.log jobs [CTRL-Z] bg 1
116 bash  shell  shell-script 

3
ฉันจะรันสคริปต์โลคัลบนเครื่องรีโมตและรวมอาร์กิวเมนต์ได้อย่างไร?
ฉันได้เขียนสคริปต์ที่ทำงานได้ดีเมื่อดำเนินการภายใน: ./sysMole -time Aug 18 18 อาร์กิวเมนต์"-time" , "Aug" , "18"และ"18"ถูกส่งผ่านไปยังสคริปต์ได้สำเร็จ ตอนนี้สคริปต์นี้ได้รับการออกแบบให้ทำงานบนเครื่องระยะไกล แต่จากไดเรกทอรีท้องถิ่นในเครื่องท้องถิ่น ตัวอย่าง: ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole ที่ยังใช้งานได้ดี แต่ปัญหาเกิดขึ้นเมื่อฉันพยายามที่จะรวมข้อโต้แย้งดังกล่าว(- เวลา 18 สิงหาคม 18)ตัวอย่างเช่น: ssh root@remoteServer "bash -s" < /var/www/html/ops1/sysMole -time Aug 18 18 หลังจากรันสคริปต์นั้นฉันได้รับข้อผิดพลาดต่อไปนี้: bash: cannot set terminal process group (-1): Invalid argument bash: no job control …

3
linux + เพิ่ม X วันเป็นวันและรับวันเสมือนใหม่
ฉันมีเครื่อง Linux (RH 5.3) ฉันต้องการเพิ่ม / คำนวณ 10 วันรวมถึงวันที่ดังนั้นฉันจะได้รับวันใหม่ (วันหมดอายุ) ตัวอย่างเช่น # date Sun Sep 11 07:59:16 IST 2012 ดังนั้นฉันต้องได้รับ NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012 โปรดแนะนำวิธีการคำนวณวันหมดอายุใหม่ (ด้วยคำสั่ง bash, ksh หรือจัดการกับวันที่?)
115 linux  bash  shell-script  date 

8
การส่งอาร์กิวเมนต์ที่กำหนดชื่อไปยังสคริปต์ของเชลล์
มีวิธีง่ายๆในการส่งผ่าน (รับ) พารามิเตอร์ชื่อไปยังสคริปต์เชลล์หรือไม่? ตัวอย่างเช่น, my_script -p_out '/some/path' -arg_1 '5' และภายในmy_script.shรับพวกเขาเป็น: # I believe this notation does not work, but is there anything close to it? p_out=$ARGUMENTS['p_out'] arg1=$ARGUMENTS['arg_1'] printf "The Argument p_out is %s" "$p_out" printf "The Argument arg_1 is %s" "$arg1" เป็นไปได้ใน Bash หรือ Zsh?

3
มีแบบแผนการตั้งชื่อตัวแปรในเชลล์สคริปต์หรือไม่
MY_VARIABLE=fooภาษาส่วนใหญ่จะมีการตั้งชื่ออนุสัญญาสำหรับตัวแปรสไตล์ที่พบมากที่สุดที่ฉันเห็นในเชลล์สคริปต์คือ นี่เป็นอนุสัญญาหรือเป็นเพียงตัวแปรส่วนกลางเท่านั้น สิ่งที่เกี่ยวกับตัวแปรท้องถิ่นสคริปต์?

10
ฉันจะเขียนตรรกะลองใหม่ในสคริปต์เพื่อลองอีกครั้งเพื่อให้ทำงานได้ถึง 5 ครั้งได้อย่างไร
ฉันต้องการเขียนตรรกะในเชลล์สคริปต์ซึ่งจะลองอีกครั้งเพื่อให้ทำงานอีกครั้งหลังจาก 15 วินาทีนานถึง 5 ครั้งโดยอ้างอิงจาก"status code = FAIL"หากล้มเหลวเนื่องจากปัญหาบางอย่าง
112 shell-script 

11
ลบบรรทัดแรกของไฟล์
ฉันจะลบบรรทัดแรกของไฟล์และเก็บการเปลี่ยนแปลงได้อย่างไร ฉันลองมัน แต่มันจะลบเนื้อหาทั้งหมดของไฟล์ $sed 1d file.txt > file.txt
110 shell-script  sed  ksh 

10
Bash FOR Loop
ฉันพยายามขนานสคริปต์ต่อไปนี้โดยเฉพาะอย่างยิ่งสำหรับอินสแตนซ์วนรอบทั้งสามของ FOR โดยใช้ GNU Parallel แต่ไม่สามารถทำได้ คำสั่ง 4 คำสั่งที่อยู่ในการวนซ้ำแบบ FOR ทำงานเป็นลำดับแต่ละลูปใช้เวลาประมาณ 10 นาที #!/bin/bash kar='KAR5' runList='run2 run3 run4' mkdir normFunc for run in $runList do fsl5.0-flirt -in $kar"deformed.nii.gz" -ref normtemp.nii.gz -omat $run".norm1.mat" -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12 fsl5.0-flirt -in $run".poststats.nii.gz" …

13
การถอดรหัสการเข้ารหัส URL (การเข้ารหัสเป็นเปอร์เซ็นต์)
ฉันต้องการถอดรหัสการเข้ารหัส URL มีเครื่องมือในตัวสำหรับการทำเช่นนี้หรือใครสามารถให้sedรหัสที่จะทำเช่นนี้ได้หรือไม่ ฉันค้นหาบิตผ่านunix.stackexchange.comและบนอินเทอร์เน็ต แต่ฉันไม่พบเครื่องมือบรรทัดคำสั่งใด ๆ สำหรับการถอดรหัสการเข้ารหัส URL สิ่งที่ฉันต้องการทำคือแก้ไขtxtไฟล์เพื่อที่: %21 กลายเป็น ! %23 กลายเป็น # %24 กลายเป็น $ %26 กลายเป็น & %27 กลายเป็น ' %28 กลายเป็น ( %29 กลายเป็น ) และอื่น ๆ

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