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

การเขียนสคริปต์เป็นรูปแบบของการเขียนโปรแกรมโดยทั่วไปมีลักษณะเป็นทางการต่ำพิมพ์หลวมและไม่ต้องการการรวบรวมที่ชัดเจน มีภาษาสคริปต์จำนวนมากและสิ่งเหล่านี้ใช้ในสถานการณ์ที่หลากหลาย - แอปพลิเคชันบรรทัดคำสั่ง, GUI, แอปพลิเคชันฝั่งเซิร์ฟเวอร์, โมดูลส่วนขยาย

15
ตัวเลขสุ่มจากช่วงใน Bash Script
ฉันต้องสร้างหมายเลขพอร์ตสุ่มระหว่าง2000-65000จากเชลล์สคริปต์ ปัญหาคือ$RANDOMหมายเลข 15 บิตดังนั้นฉันติดอยู่! PORT=$(($RANDOM%63000+2001)) จะทำงานได้ดีถ้ามันไม่ได้สำหรับขนาดที่ จำกัด ไม่มีใครมีตัวอย่างของวิธีที่ฉันสามารถทำได้อาจโดยการแยกบางสิ่งบางอย่างจาก/dev/urandomและรับมันในช่วงหรือไม่
198 bash  shell  scripting 

7
คัดลอกโฟลเดอร์แบบเรียกซ้ำโดยไม่รวมบางโฟลเดอร์
ฉันพยายามเขียนสคริปต์ทุบตีง่าย ๆ ที่จะคัดลอกเนื้อหาทั้งหมดของโฟลเดอร์รวมถึงไฟล์และโฟลเดอร์ที่ซ่อนอยู่ในโฟลเดอร์อื่น แต่ฉันต้องการแยกโฟลเดอร์เฉพาะบางอย่างออก ฉันจะบรรลุสิ่งนี้ได้อย่างไร
197 bash  unix  shell  scripting 

7
แก้ไขการใช้อักษรตัวพิมพ์ใหญ่ของตัวแปรสคริปต์ Bash และ shell
ฉันใช้เชลล์สคริปต์จำนวนมากที่มีตัวแปรในตัวพิมพ์ใหญ่ทั้งหมดและฉันคิดเสมอว่ามีความเข้าใจผิดที่รุนแรง ความเข้าใจของฉันคือว่าโดยการประชุม (และอาจจำเป็นนานแล้ว) ตัวแปรสภาพแวดล้อมอยู่ในตัวพิมพ์ใหญ่ทั้งหมด แต่ในสภาพแวดล้อมที่มีการเขียนสคริปต์ที่ทันสมัยเช่นทุบตีฉันได้ต้องการเสมอประชุมของชื่อกรณีที่ต่ำกว่าสำหรับตัวแปรชั่วคราวและคนบนกรณีเฉพาะสำหรับการส่งออกตัวแปร (เช่นสภาพแวดล้อม) ตัวอย่างเช่น: #!/usr/bin/env bash year=`date +%Y` echo "It is $year." export JAVA_HOME="$HOME/java" นั่นเป็นสิ่งที่ฉันทำ มีแหล่งข้อมูลที่เชื่อถือได้ซึ่งเห็นด้วยหรือไม่เห็นด้วยกับวิธีการนี้หรือเป็นเรื่องของสไตล์อย่างหมดจดหรือไม่?

13
ตรวจสอบว่าฟังก์ชั่นที่มีอยู่ในทุบตี
ขณะนี้ฉันกำลังทำการทดสอบหน่วยที่ดำเนินการจากการทุบตี การทดสอบหน่วยจะเริ่มต้นใช้งานและทำความสะอาดในสคริปต์ทุบตี สคริปต์นี้เป็นปกติมีฟังก์ชัน init (), execute () และ cleanup () แต่พวกเขาไม่ได้บังคับ ฉันต้องการทดสอบว่าพวกเขาเป็นหรือไม่ได้กำหนดไว้ ก่อนหน้านี้ฉันทำแบบนี้โดยการ greping และ seding แหล่งที่มา แต่ดูเหมือนว่าผิด มีวิธีที่สง่างามกว่านี้หรือไม่? แก้ไข: sniplet ต่อไปนี้ทำงานเหมือนเครื่องราง: fn_exists() { LC_ALL=C type $1 | grep -q 'shell function' }


14
วิธีทำให้สคริปต์ Python ทำงานได้เหมือนบริการหรือดีมอนใน Linux
ฉันได้เขียนสคริปต์ Python ที่ตรวจสอบที่อยู่อีเมลที่แน่นอนและส่งอีเมลใหม่ไปยังโปรแกรมภายนอก ฉันจะทำให้สคริปต์นี้ทำงาน 24 ชั่วโมงเช่นเปลี่ยนเป็น daemon หรือบริการใน Linux ได้อย่างไร ฉันจะต้องวนซ้ำที่ไม่สิ้นสุดในโปรแกรมหรือสามารถทำได้โดยเพียงแค่มีรหัสดำเนินการหลายครั้ง?

9
จะตรวจสอบนามสกุลของชื่อไฟล์ในสคริปต์ทุบตีได้อย่างไร?
ฉันกำลังเขียนสคริปต์สร้างทุกคืนในทุบตี ทุกอย่างเรียบร้อยและสวยหรูยกเว้นอุปสรรค์ตัวน้อย: #!/bin/bash for file in "$PATH_TO_SOMEWHERE"; do if [ -d $file ] then # do something directory-ish else if [ "$file" == "*.txt" ] # this is the snag then # do something txt-ish fi fi done; ปัญหาของฉันคือการกำหนดนามสกุลไฟล์แล้วทำตาม ฉันรู้ว่าปัญหาอยู่ในคำสั่ง if ทดสอบไฟล์ txt ฉันจะทราบได้อย่างไรว่าไฟล์นั้นมี. txt ต่อท้ายหรือไม่
170 bash  scripting  file 

12
วิธีรับส่วนของไฟล์หลังจากบรรทัดแรกที่ตรงกับนิพจน์ทั่วไป
ฉันมีไฟล์ที่มีประมาณ 1,000 บรรทัด ฉันต้องการส่วนของไฟล์ของฉันหลังจากบรรทัดที่ตรงกับคำสั่ง grep ของฉัน นั่นคือ: $ cat file | grep 'TERMINATE' # It is found on line 534 ดังนั้นฉันต้องการไฟล์จากบรรทัด 535 ถึงบรรทัด 1000 สำหรับการประมวลผลเพิ่มเติม ฉันจะทำสิ่งนั้นได้อย่างไร
169 bash  shell  scripting  grep 

6
awk โดยไม่ต้องพิมพ์ newline
ฉันต้องการผลรวมตัวแปร / NR ที่จะพิมพ์แบบเคียงข้างกันในการทำซ้ำแต่ละครั้ง เราจะหลีกเลี่ยง awk จากการพิมพ์บรรทัดใหม่ในแต่ละการวนซ้ำได้อย่างไร ในรหัสของฉันบรรทัดใหม่จะถูกพิมพ์ตามค่าเริ่มต้นในการทำซ้ำแต่ละครั้ง for file in cg_c ep_c is_c tau xhpl printf "\n $file" >> to-plot.xls for f in 2.54 1.60 800 awk '{sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls done done ฉันต้องการให้ผลลัพธ์ปรากฏเช่นนี้ cg_c ans1 ans2 ans3 ep_c ans1 ans2 ans3 is_c ans1 ans2 ans3 …
169 scripting  awk  newline 

10
คำสั่ง eval ใน Bash และการใช้งานทั่วไป
หลังจากอ่านหน้าคนทุบตีและเกี่ยวกับการโพสต์นี้ ฉันยังคงมีปัญหาในการเข้าใจสิ่งที่evalคำสั่งทำและสิ่งที่จะเป็นประโยชน์โดยทั่วไป ตัวอย่างเช่นถ้าเราทำ: bash$ set -- one two three # sets $1 $2 $3 bash$ echo $1 one bash$ n=1 bash$ echo ${$n} ## First attempt to echo $1 using brackets fails bash: ${$n}: bad substitution bash$ echo $($n) ## Second attempt to echo $1 using parentheses fails bash: 1: …
166 linux  bash  shell  scripting  eval 

13
ฉันจะใช้ Ruby สำหรับการเขียนสคริปต์เชลล์ได้อย่างไร
ฉันมีงานการเขียนสคริปต์เชลล์แบบง่าย ๆ ที่ฉันต้องการทำ ตัวอย่างเช่น: การเลือกไฟล์ในไดเรกทอรีการทำงานจากรายการไฟล์ที่ตรงกับนิพจน์ทั่วไป ฉันรู้ว่าฉันสามารถทำสิ่งนี้โดยใช้มาตรฐานทุบตีและ grep แต่ฉันจะดีสามารถแฮ็คสคริปต์อย่างรวดเร็วที่จะทำงานใน windows และ linux โดยไม่ต้องจำกองโปรแกรมบรรทัดคำสั่งและธงเป็นต้น ฉันพยายามทำสิ่งนี้ แต่จบลงด้วยความสับสนว่าฉันควรได้รับข้อมูลเช่นการอ้างอิงไปยังไดเรกทอรีปัจจุบัน ดังนั้นคำถามคือส่วนใดของไลบรารี่ Ruby ที่ฉันต้องรู้ในการเขียนเชลล์สคริป
165 ruby  shell  scripting 

6
วัตถุประสงค์ของ #! / usr / bin / python3
ฉันสังเกตสิ่งนี้ในสองภาษาสคริปต์ แต่ในตัวอย่างนี้ฉันใช้ไพ ธ อน ในบทเรียนจำนวนมากพวกเขาจะเริ่มด้วย#!/usr/bin/python3บรรทัดแรก ฉันไม่เข้าใจว่าทำไมเรามีสิ่งนี้ ระบบปฏิบัติการไม่ควรรู้ว่าเป็นสคริปต์ของงูหลาม (เห็นได้ชัดว่าติดตั้งไว้แล้วเนื่องจากคุณทำการอ้างอิงถึง) เกิดอะไรขึ้นถ้าผู้ใช้กำลังใช้ระบบปฏิบัติการที่ไม่ได้ใช้ยูนิกซ์ ภาษาถูกติดตั้งในโฟลเดอร์อื่นด้วยเหตุผลใดก็ตาม ผู้ใช้มีรุ่นอื่น โดยเฉพาะอย่างยิ่งเมื่อไม่ใช่หมายเลขเวอร์ชันเต็ม (เช่น Python3 กับ Python32) หากมีสิ่งใดฉันเห็นการทำลายสคริปต์ไพ ธ อนเนื่องจากเหตุผลด้านบน
160 python  scripting 

16
ลบทั้งหมดยกเว้นไฟล์ X ล่าสุดใน bash
มีวิธีที่ง่ายในสภาพแวดล้อมระบบปฏิบัติการยูนิกซ์สวยกับมาตรฐานทุบตีเพื่อเรียกใช้คำสั่งลบทั้งหมด แต่ส่วนใหญ่ไฟล์ X ล่าสุดจากไดเรกทอรีหรือไม่? หากต้องการยกตัวอย่างที่เป็นรูปธรรมมากขึ้นลองจินตนาการถึงงาน cron ที่เขียนไฟล์ (เช่นไฟล์บันทึกหรือการสำรองข้อมูล tar-ed up) ไปยังไดเรกทอรีทุกชั่วโมง ฉันต้องการวิธีที่จะให้งาน cron อื่นทำงานซึ่งจะลบไฟล์ที่เก่าที่สุดในไดเรกทอรีนั้นจนกว่าจะมีค่าน้อยกว่า 5 และเพียงแค่ต้องมีความชัดเจนมีเพียงหนึ่งแฟ้มปัจจุบันก็ไม่ควรจะถูกลบออก
157 bash  unix  scripting 

13
วิธีการแสดงกล่องข้อความ GUI จากสคริปต์ทุบตีใน linux?
ฉันกำลังเขียนสคริปต์ทุบตีเล็กน้อยภายใต้ Ubuntu linux ฉันต้องการที่จะเรียกใช้พวกเขาจาก GUI โดยไม่ต้องใช้หน้าต่างเทอร์มินัลเพื่อป้อนอินพุตหรือดูเอาต์พุตใด ๆ จนถึงตอนนี้อินพุตที่จำเป็นเท่านั้นคือรหัสผ่านสำหรับ sudo - และ gksudo จัดการได้ดี แต่ฉันยังไม่พบวิธีที่ง่ายในการแสดงกล่องข้อความ มีคำสั่ง 'gkmessage' บ้างไหม? ฉันต้องการบางสิ่งบางอย่างในการติดตั้งเริ่มต้นของ Ubuntu แต่ฉันไม่รังเกียจที่จะติดตั้งแพ็คเกจใหม่หากจำเป็น
152 linux  bash  scripting  ubuntu  gtk 

12
จะบอกได้อย่างไรว่าสตริงไม่ได้ถูกกำหนดไว้ในสคริปต์เชลล์ Bash
ถ้าฉันต้องการตรวจสอบสตริงว่างฉันจะทำ [ -z $mystr ] แต่ถ้าฉันต้องการตรวจสอบว่าตัวแปรได้ถูกกำหนดเลย หรือไม่มีความแตกต่างในการเขียนสคริปต์ Bash?
151 bash  shell  scripting  string  null 

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