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

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

4
จะย้ายและสร้างโฟลเดอร์ใหม่ในเวลาเดียวกันได้อย่างไร?
ฉันมีโฟลเดอร์ชื่อหนึ่งstatisticsในเซิร์ฟเวอร์อูบุนตูซึ่งจัดเก็บไฟล์ข้อมูลเป็นประจำ ฉันจะเปลี่ยนชื่อstatisticsโฟลเดอร์เป็นbackup-xxในขณะที่สร้างstatisticsโฟลเดอร์ใหม่เพื่อให้สามารถจัดเก็บไฟล์ใหม่ได้อย่างไร แฟ้มในstatisticsโฟลเดอร์ที่ถูกสร้างขึ้นโดย file_put_contentsPHP ฉันต้องการเปลี่ยนชื่อโฟลเดอร์เนื่องจากมีไฟล์จำนวนมากในstatisticsโฟลเดอร์

4
เชลล์สคริปต์สามารถพิมพ์อาร์กิวเมนต์โดยอ้างอิงตามที่คุณต้องการเขียนลงในพร้อมท์เชลล์หรือไม่
ในเชลล์สคริปต์ความเข้าใจของฉันคือการ"$@"ขยายไปยังอาร์กิวเมนต์ของสคริปต์โดยอ้างอิงตามที่ต้องการ เช่นนี้ส่งต่อข้อโต้แย้งสคริปต์เพื่อ gcc: gcc -fPIC "$@" <<<แม้ว่าการใช้ไวยากรณ์ bash pass-to-stdin นั้น"@$"ไม่ได้ผลอย่างที่ฉันคาดไว้ #!/bin/bash cat <<< "$@" เรียกสคริปต์ตามที่./test.sh foo "bar baz"ให้ไว้ foo bar baz ฉันคาดหวัง foo "bar baz" มีวิธีเขียนเชลล์สคริปต์ที่พิมพ์อาร์กิวเมนต์เป็นคุณจะเขียนไว้ใน shell prompt หรือไม่ ตัวอย่างเช่น: คำใบ้เกี่ยวกับคำสั่งที่จะใช้ถัดไปรวมถึงอาร์กิวเมนต์ของสคริปต์ในคำใบ้

7
grep บล็อกเส้นที่แน่นอน (เนื้อหาของ file1) จาก file2
ฉันมีสองไฟล์file1และfile2. เนื้อหาตัวอย่างของfile1คือ: A B C D E F G H และเนื้อหาของfile2เป็นเช่น: A B few other lines E F few more other lines A B C D E F G H few more other lines G H ดังนั้นฉันต้องการค้นหาบล็อกทั้งหมดของfile1เนื้อหาในfile2เท่านั้น ซึ่งหมายความว่าผลลัพธ์ควรมีเพียงบรรทัดเหล่านี้: A B C D E F G H โปรดทราบว่า: - เฉพาะบรรทัดที่มารวมกันควรเป็นส่วนหนึ่งของผลลัพธ์

5
ค้นหาการเกิดขึ้นครั้งสุดท้ายของสตริงในหลายไฟล์
ฉันต้องการค้นหาไฟล์บันทึกหลายไฟล์ (ไฟล์ทั้งหมดที่สร้างใน 24 ชั่วโมงที่ผ่านมาทั้งหมดเก็บไว้ในไดเรกทอรีเดียวกัน) เพื่อค้นหาสตริงที่เกิดขึ้นครั้งล่าสุด นี่คือคำสั่งที่ฉันเขียน: find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1 แต่นี่จะส่งคืนบรรทัดสุดท้ายสำหรับไฟล์เดียวเท่านั้น ข้อเสนอแนะเกี่ยวกับวิธีการปรับแต่งนี้เพื่อให้ได้ทุกบรรทัด?

5
Shell Script: คว้าสตริงที่อยู่ตรงกลางของข้อความบางครั้งในตอนเริ่มต้น
ฉันมีไฟล์ข้อความขนาดใหญ่ที่ส่วนหนึ่งของมันมีลักษณะเช่นนี้ (ค่าที่แก้ไข): JULIANA XXXX006060 LI1033322 THC BRL 730.00 XXXX006296 AA1004737 THC BRL 1,740.00 SANTOS JULIANA XXXX006668 AA1004786 THC BRL 8,150.00 SANTOS JULIANA CABINDA XXXX006697 AA1004777 THC BRL 2,325.00 SANTOS JULIANA XXXX006699 AA1004790 THC BRL 2,325.00 JULIANA BATA XXXX006141 CCC012946 THC BRL 1,460.00 JULIANA BATA XXXX006153 CCC013054 THC BRL 870.00 JULIANA …


2
เหตุใด printf จึงพิมพ์อาร์กิวเมนต์มากกว่าที่คาดไว้
เหตุใดเชลล์สคริปต์การพิมพ์นี้จึงมีอินพุตสองครั้ง ฉันคาดว่าสคริปต์จะไม่สนใจอินพุตหลังจาก 5 สคริปต์: #! /bin/bash echo "Enter 5 words : " read a b c d e printf "> %s %s %s %s %s <" $a $b $c $d $e เอาท์พุท: user@linux:~$ pico ifs2.sh user@linux:~$ ./ifs2.sh Enter 5 words : 1 2 3 4 5 > 1 2 3 …

4
ย้ายไฟล์ตามวันที่ไปยังไดเรกทอรีอื่นโดยใช้ CLI
ฉันมีรูปภาพจำนวนมากจากฮาร์ดไดรฟ์เก่าที่ฉันพยายามจัดระเบียบ ถ้าฉันรันls -lฉันสังเกตว่าไฟล์เหล่านี้ทั้งหมดมีวันที่สร้างปี 2555 หรือก่อนหน้า โดยอุดมคติแล้วฉันต้องการย้ายสิ่งเหล่านี้ไปยังฮาร์ดไดรฟ์ที่สองของคอมพิวเตอร์ซึ่งไม่ได้ตั้งค่าให้ติดตั้งโดยอัตโนมัติ โดยเฉพาะอย่างยิ่งฉันสามารถทำสิ่งนี้ทั้งหมดเป็นชุดที่มีคำสั่งเชื่อมโยงกัน จนถึงตอนนี้ผมมีls -l | grep -i 2012ที่ถ่มน้ำลายออกเฉพาะไฟล์ที่มี 2012 ls -lในวันที่จัดไว้ให้โดย ทีนี้เคล็ดลับก็คือcp'ทุกไฟล์เหล่านั้นไปยังไดเรกทอรีใหม่ ฉันไม่แน่ใจว่าจะไปที่ไหนเพราะจะต้องคัดลอกแต่ละไฟล์ คำสั่งชุดถัดไปของฉันคืออะไร


2
คำสั่งเชลล์ / สคริปต์เพื่อดูว่าโฮสต์ยังมีชีวิตอยู่หรือไม่?
ฉันกำลังพยายามหาวิธีเพิ่มเติมเพื่อดูว่าโฮสต์ที่กำหนดนั้นใช้งานได้หรือไม่โดยใช้คำสั่งเชลล์ เป็นการดีที่มันจะสามารถทำงานกับทั้งชื่อโฮสต์และที่อยู่ IP ตอนนี้วิธีเดียวที่ฉันรู้คือ ping อาจรวมเข้ากับสคริปต์ตามที่อธิบายไว้ที่นี่ ความคิดอื่น ๆ ?

5
sudo ในสคริปต์ที่ไม่โต้ตอบ
A && B && Cฉันมีสคริปต์ที่รันสามฟังก์ชั่น: ฟังก์ชั่นBจะต้องทำงานเป็นผู้ใช้ขั้นสูงในขณะที่AและCไม่ ฉันมีวิธีแก้ปัญหาต่าง ๆ แต่สิ่งเหล่านี้ไม่เป็นที่พอใจ sudo สคริปต์ทั้งหมด: sudo 'A && B && C' ดูเหมือนว่าเป็นความคิดที่ไม่ถูกต้องในการใช้งานAและCในฐานะผู้ใช้ระดับสูงหากไม่จำเป็น ทำให้สคริปต์โต้ตอบ: A && sudo B && C ฉันอาจต้องพิมพ์รหัสผ่านของฉัน แต่ฉันต้องการให้สคริปต์ของฉันไม่สามารถโต้ตอบได้เนื่องจากแต่ละฟังก์ชั่นอาจใช้เวลาสักครู่และฉันไม่ต้องการให้สคริปต์รอฉัน นั่นเป็นเหตุผลว่าทำไมมันถึงเป็นสคริปต์ในตอนแรกดังนั้นฉันจึงไม่ต้องดูมันเลย วิธีการแก้ปัญหาโง่: sudo : && A && sudo -n B && C ครั้งแรกมันดูเหมือนว่าโง่ที่จะใช้ไม่มี-op แรกและเราก็ต้องข้ามนิ้วมือของฉันที่ไม่ได้ไปใช้เวลามากกว่าsudo$sudo_timeout วิธีแก้ปัญหาสมมุติฐาน (ฉันหวังว่าคุณจะบอกฉันมันมีอยู่): sudo --store-cred 'A && sudo --use-cred-from-parent-sudo B …

1
bashscript เพื่อตรวจจับปุ่มลูกศรขวาถูกกด
ทำไมสิ่งนี้ถึงตรวจพบว่าเป็นจริงเสมอแม้ว่ารหัสคีย์นั้นจะไม่ถูกต้องลูกศรขวา stty_state=`stty -g` stty raw; stty -echo keycode=`dd bs=1 count=1 2>/dev/null` stty "$stty_state" echo $keycode if [ "$keycode"=39 ]; then echo "Right Arrow Key Pressed!" fi

8
Grep สำหรับรูปแบบที่เริ่มต้นหรือกลางบรรทัด
ฉันจะเริ่มต้นด้วยการบอกว่าฉันคิดว่าปัญหานี้เป็นผู้บริสุทธิ์น้อยกว่าเล็กน้อยฟังดู สิ่งที่ฉันต้องทำ: ตรวจสอบโฟลเดอร์ภายในตัวแปรสภาพแวดล้อม PATH อาจเป็นตอนเริ่มต้นหรือหลังจากนั้น ฉันแค่ต้องยืนยันว่าโฟลเดอร์นั้นอยู่ที่นั่น ตัวอย่างปัญหาของฉัน - มาใช้/opt/gnomeกัน สถานการณ์ที่ 1: โฟลเดอร์ไม่ได้อยู่ที่ตำแหน่งเริ่มต้นของ PATH # echo "$PATH" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome # echo "$PATH" | grep ":/opt/gnome" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome โปรดทราบว่าความต้องการ grep /var/opt/gnomeจะเฉพาะเจาะจงมากพอเพื่อที่จะไม่จับ ดังนั้นลำไส้ใหญ่ สถานการณ์ที่ 2: โฟลเดอร์อยู่ที่จุดเริ่มต้นของ PATH # echo "$PATH" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome # echo "$PATH" | grep "^/opt/gnome" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome นี่คือปัญหาของฉัน - ฉันต้องค้นหาโคลอนหรือเริ่มต้นของบรรทัดด้วยโฟลเดอร์นี้ สิ่งที่ฉันต้องการทำคือหนึ่งในสองนิพจน์วงเล็บเหลี่ยม: # echo $PATH …

3
Dash เทียบเท่ากับการเปลี่ยนเส้นทางของสคริปต์เอาต์พุต
ใน Bash คุณสามารถเปลี่ยนทิศทางเอาต์พุต stdout ในอนาคตทั้งหมดของสคริปต์ที่รันอยู่ในปัจจุบัน ตัวอย่างเช่นกับสคริปต์นี้ exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 สิ่งนี้จะจบลงใน syslog: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 แต่นี่เป็นข้อมูลเฉพาะของ Bash และการดำเนินการเปลือยกายด้วยการเปลี่ยนเส้นทางดูเหมือนจะไม่ทำงานใน Dash Syntax error: redirection unexpected ฉันจะทำให้มันทำงานใน Dash หรืออาจเป็นได้ทั้งใน shells?

4
EOF ที่ไม่คาดคิดและข้อผิดพลาดทางไวยากรณ์
ขณะนี้ฉันกำลังเขียนเชลล์สคริปต์ตัวที่สามของฉันและฉันพบปัญหา นี่คือสคริปต์ของฉัน: #!/bin/bash echo "choose one of the following options : \ 1) display all current users \ 2) list all files \ 3) show calendar \ 4) exit script" while read do case in 1) who;; 2) ls -a;; 3) cal;; 4) exit;; esac done เมื่อฉันพยายามเรียกใช้สคริปต์ข้อความนี้จะบอกว่า: line2 : unexpected …

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