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

สคริปต์คือลำดับของคำสั่งหรือคำสั่งที่ดำเนินการโดยโปรแกรมล่ามแทนที่จะรวบรวมเป็นโปรแกรมปฏิบัติการแบบสแตนด์อโลน

25
ทำซ้ำคำสั่ง Unix ทุก ๆ x ตลอดไป
มีในตัวคำสั่ง Unix repeatมีอาร์กิวเมนต์แรกคือจำนวนครั้งที่จะทำซ้ำคำสั่งที่คำสั่ง (มีข้อโต้แย้งใด ๆ ) repeatจะถูกระบุโดยการขัดแย้งที่ยังเหลืออยู่ ตัวอย่างเช่น, % repeat 100 echo "I will not automate this punishment." จะสะท้อนสตริงที่กำหนด 100 ครั้งแล้วหยุด ฉันต้องการคำสั่งที่คล้ายกัน - เรียกมันforeverว่า - มันใช้งานได้เหมือนกันยกเว้นอาร์กิวเมนต์แรกคือจำนวนวินาทีในการหยุดระหว่างการเล่นซ้ำและมันจะซ้ำตลอดไป ตัวอย่างเช่น, % forever 5 echo "This will get echoed every 5 seconds forever and ever." ฉันคิดว่าฉันถามว่ามีสิ่งนั้นมีอยู่ก่อนที่ฉันจะเขียนหรือไม่ ฉันรู้ว่ามันเหมือนกับสคริปต์ Perl หรือ Python 2 บรรทัด แต่อาจมีวิธีมาตรฐานมากกว่านี้ ถ้าไม่รู้สึกลังเลที่จะโพสต์วิธีแก้ปัญหาในภาษาสคริปต์ที่คุณชื่นชอบสไตล์Rosetta …

3
การใช้“ $ {a: -b}” สำหรับการกำหนดตัวแปรในสคริปต์
ฉันดูสคริปต์บางตัวที่คนอื่นเขียน (โดยเฉพาะ Red Hat) และตัวแปรจำนวนมากถูกกำหนดโดยใช้สัญกรณ์ต่อไปนี้ VARIABLE1="${VARIABLE1:-some_val}" หรือบางตัวขยายตัวแปรอื่น ๆ VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" จุดประสงค์ของการใช้สัญลักษณ์นี้แทนที่จะประกาศเพียงค่าโดยตรงVARIABLE1=some_valคืออะไร? มีประโยชน์กับสัญกรณ์นี้หรือข้อผิดพลาดที่เป็นไปได้ที่จะป้องกัน? ที่ไม่:-ได้มีความหมายเฉพาะในบริบทนี้?

8
อนุญาตให้ setuid บนเชลล์สคริปต์
setuidบิตได้รับอนุญาตบอกลินุกซ์ที่จะเรียกใช้โปรแกรมที่มีรหัสผู้ใช้ที่มีประสิทธิภาพของการใช้แทนการปฏิบัติการที่: > cat setuid-test.c #include <stdio.h> #include <unistd.h> int main(int argc, char** argv) { printf("%d", geteuid()); return 0; } > gcc -o setuid-test setuid-test.c > ./setuid-test 1000 > sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test > ./setuid-test 65534 อย่างไรก็ตามสิ่งนี้ใช้กับไฟล์ที่เรียกทำงานได้เท่านั้น เชลล์สคริปต์ละเว้นบิต setuid: > cat setuid-test2 #!/bin/bash id -u > ./setuid-test2 …

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

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
ส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ทุบตี
ฉันยังใหม่กับการเขียนโปรแกรมสคริปต์ทุบตี ฉันต้องการใช้สคริปต์ทุบตี 'deploymLog' ซึ่งยอมรับว่าเป็นอาร์กิวเมนต์สตริงหนึ่งชื่อ (ชื่อ) [root@localhost Desktop]# ./deploymLog.sh name ที่นี่ฉันต้องการผ่านอาร์กิวเมนต์สตริง (ชื่อ) ผ่านบรรทัดคำสั่ง ในฐานะที่เป็นขั้นตอนเริ่มต้นฉันต้องผนวกเวลาประทับปัจจุบันพร้อมกับสตริงอินพุตนี้ไปยังไฟล์บันทึกการพูดLogone.txtในไดเรกทอรีปัจจุบันในรูปแบบด้านล่าง: [name]=[System time timestamp1] เป็นไปได้อย่างไร
114 bash  shell  scripting 

6
การใช้ && และ || สับสน ผู้ประกอบการ
ฉันอ่านผ่าน/etc/rc.d/init.d/sendmailไฟล์ (ฉันรู้ว่านี่ไม่ค่อยใช้ แต่ฉันกำลังเรียนเพื่อสอบ) และฉันสับสนเล็กน้อยเกี่ยวกับตัวดำเนินการ&&และตัว||ดำเนินการ ฉันอ่านที่พวกเขาสามารถใช้ในงบเช่น: if [ test1 ] && [ test2 ]; then echo "both tests are true" elif [ test1 ] || [ test2 ]; then echo "one test is true" fi อย่างไรก็ตามสคริปต์นี้แสดงคำสั่งบรรทัดเดียวเช่น: [ -z "$SMQUEUE" ] && SMQUEUE="QUEUE" [ -f /usr/sbin/sendmail ] || exit 0 สิ่งเหล่านี้ดูเหมือนจะใช้&&และ||โอเปอเรเตอร์เพื่อล้วงเอาการตอบสนองจากการทดสอบ แต่ฉันไม่สามารถขุดเอกสารเกี่ยวกับการใช้งานของผู้ให้บริการเหล่านี้ได้ …

6
ฉันจะเพิ่ม (ลบ ฯลฯ ) สองตัวเลขด้วย bash ได้อย่างไร
ฉันสามารถอ่านตัวเลขและการดำเนินการด้วย: echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op แต่ความพยายามของฉันทั้งหมดเพื่อเพิ่มหมายเลขล้มเหลว: case "$op" in "+") echo num1+num2;; "-") echo `num1-num2`;; esac วิ่ง: First number please 1 Second mumber please 2 Operation? + เอาท์พุท: num1+num2 ...หรือ... echo $num1+$num2;; # results in: 1+2 ...หรือ... echo …

6
ssh-keygen อัตโนมัติโดยไม่มีข้อความรหัสผ่านเป็นอย่างไร
ฉันต้องการสร้างสคริปต์อัตโนมัติที่โทรออกssh-keygenและสร้างคู่คีย์ผับ / ส่วนตัวที่ฉันจะใช้ในภายหลัง ในหลักการทุกอย่างทำงานได้ดีกับ .... ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q ... ยกเว้นว่ามันจะถามฉันสำหรับวลีรหัสผ่านที่จะเข้ารหัสคีย์ สิ่งนี้ทำให้ - ปัจจุบัน - อัตโนมัติยาก ฉันสามารถให้ข้อความรหัสผ่านผ่านอาร์กิวเมนต์บรรทัดคำสั่ง-N thepassphraseดังนั้นเพื่อให้พรอมต์ปรากฏ ถึงกระนั้นฉันก็ยังไม่ต้องการที่จะมีกุญแจ - เพิ่มความปลอดภัยด้วยการเข้ารหัส - และต้องการให้คู่กุญแจเป็นข้อความธรรมดา ทางออกที่ดีที่สุดสำหรับปัญหานี้คืออะไร -qตัวเลือกซึ่งคาดว่าหมายถึง "ที่เงียบสงบ / เงียบ" ไม่ยังไม่หลีกเลี่ยงการมีปฏิสัมพันธ์วลีรหัสผ่าน นอกจากนี้ฉันไม่พบสิ่งนี้ ssh-keygen ...... -q --no-passphrase โปรดอย่าเริ่มเทศนาเกี่ยวกับหรือบรรยายให้ฉันถึงข้อดีข้อเสียของ "ข้อความรหัสผ่านที่หายไป" ฉันรู้แล้ว ในรูปแบบโต้ตอบ (ไม่ใช่สคริปต์) ผู้ใช้สามารถกด [ENTER] สองครั้งและคีย์จะถูกบันทึกเป็นข้อความธรรมดา นี่คือสิ่งที่ฉันต้องการบรรลุในสคริปต์เช่นนี้: #! / bin …
86 ssh  scripting 

5
shebang พิจารณาเชลล์ที่รันสคริปต์หรือไม่
นี่อาจเป็นคำถามที่โง่ แต่ฉันก็ยังถาม ถ้าฉันได้ประกาศ shebang #!/bin/bash ในตอนต้นของmy_shell_script.shฉันจะต้องเรียกใช้สคริปต์นี้โดยใช้ทุบตี [my@comp]$bash my_shell_script.sh หรือฉันสามารถใช้เช่น [my@comp]$sh my_shell_script.sh และสคริปท์ของฉันกำหนดเชลล์ที่กำลังใช้งานอยู่โดยใช้ shebang? มันเกิดขึ้นเหมือนกันกับkshเชลล์ไหม? ฉันใช้ AIX

3
มันหมายความว่าอะไรที่จะมี $“ ดอลลาร์ - นำหน้าสตริง” ในสคริปต์?
ฉันเพิ่งเห็นสิ่งนี้ในสคริปต์ init: echo $"Stopping Apache" เครื่องหมายดอลลาร์คืออะไร การวิจัยของฉันจนถึงขณะนี้: ฉันพบสิ่งนี้ในคู่มือทุบตี: extquote หากตั้งค่า$'string'และการ$"string"อ้างอิงจะดำเนินการภายในส่วน${parameter}ขยายที่อยู่ในเครื่องหมายคำพูดคู่ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น ... แต่ฉันไม่พบความแตกต่างระหว่างสตริงที่มีและไม่มีส่วน$นำหน้า: $ echo "I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in ${PWD}" I am in /var/shared/home/southworth/qed $ echo "I am in ${PWD}" I …

6
การใช้ while loop เพื่อ ssh ไปยังเซิร์ฟเวอร์หลายเครื่อง
ฉันมีไฟล์servers.txtพร้อมรายการเซิร์ฟเวอร์: server1.mydomain.com server2.mydomain.com server3.mydomain.com เมื่อฉันอ่านไฟล์ทีละบรรทัดด้วยwhileและสะท้อนแต่ละบรรทัดทำงานได้ตามที่คาดหวัง พิมพ์ทุกบรรทัด $ while read HOST ; do echo $HOST ; done < servers.txt server1.mydomain.com server2.mydomain.com server3.mydomain.com อย่างไรก็ตามเมื่อฉันต้องการ ssh ไปยังเซิร์ฟเวอร์ทั้งหมดและรันคำสั่งทันใดนั้นwhileลูปของฉันก็หยุดทำงาน: $ while read HOST ; do ssh $HOST "uname -a" ; done < servers.txt Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 …

2
ตัวเลือก su - ใช้คำสั่งเป็นผู้ใช้อื่น
ฉันสงสัยว่าจะเรียกใช้คำสั่งในฐานะผู้ใช้อื่นจากสคริปต์ได้อย่างไร ฉันมีเจ้าของสคริปต์ตั้งค่าเป็นรูท ฉันยังมีคำสั่งต่อไปนี้ถูกเรียกใช้ภายในสคริปต์เพื่อเรียกใช้คำสั่งเป็นผู้ใช้ฮัดสัน: su -c command hudson นี่เป็นไวยากรณ์ที่ถูกต้องหรือไม่
75 bash  scripting  su  sudo 

9
วิธี grep สำหรับสายเดียวกัน แต่หลายไฟล์ในเวลาเดียวกันได้อย่างไร
ฉันมีชุดไฟล์บันทึกที่ฉันต้องการตรวจสอบและฉันต้องการค้นหาสตริงที่ระบุในไฟล์เดียวกันพร้อมกันเป็นไปได้หรือไม่ ขณะนี้ฉันกำลังใช้ grep -E 'fatal|error|critical|failure|warning|' /path_to_file ฉันจะใช้สิ่งนี้และค้นหาสตริงของไฟล์หลายไฟล์พร้อมกันได้อย่างไร หากนี่เป็นสิ่งที่จำเป็นต้องมีสคริปต์ผู้อื่นสามารถให้สคริปต์ง่ายๆเพื่อทำสิ่งนี้ได้หรือไม่
57 scripting  grep 

3
ฉันจะระงับเอาต์พุตจาก grep ได้อย่างไรเพื่อให้ส่งคืนสถานะออกเท่านั้น
ฉันมีgrepคำสั่ง ฉันกำลังค้นหาคำหลักจากไฟล์ แต่ไม่ต้องการแสดงผลลัพธ์ grepผมแค่อยากจะรู้ว่าออกจากสถานะของ

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