2024 ผู้เขียน: Peter John Melton | [email protected]. แก้ไขล่าสุด: 2023-12-16 04:42
ตรวจสอบสคริปต์สคริปต์ datecp แล้ว
ในส่วนแรกของคู่มือการเขียนสคริปต์สำหรับเชลล์ของเราเราได้สร้างสคริปต์ที่คัดลอกไฟล์ลงในไดเร็กทอรีสำรองข้อมูลหลังจากที่ได้เพิ่มวันที่ลงในส่วนท้ายของชื่อไฟล์แล้ว
ซามูเอลดิออนน์ - เรียลชี้ให้เห็นว่ามีวิธีที่ดีกว่าในการจัดการกับการอ้างอิงตัวแปรของเรา
Arguments are space-separated in the bash shell, it will tokenize when there is a space in the resulted expanded command. In your script,
cp $1 $2.$date_formatted
จะทำงานได้ตามที่ตั้งใจตราบใดที่ตัวแปรที่ขยายตัวไม่มีช่องว่างอยู่ ถ้าคุณเรียกสคริปต์ของคุณด้วยวิธีนี้:
datecp 'my old name' 'my new name'
การขยายตัวจะทำให้คำสั่งนี้:
cp my new name my old name.the_date
ซึ่งมีข้อโต้แย้งอยู่ 6 ข้อ
เพื่อแก้ไขปัญหานี้อย่างถูกต้องบรรทัดสุดท้ายของสคริปต์ควรเป็น:
cp '$1' '$2.$date_formatted'
อย่างที่คุณเห็นเปลี่ยนบรรทัดของสคริปต์จาก:
cp -iv $1 $2.$date_formatted
ไปที่:
cp -iv “$1” “$2”.$date_formatted
จะดูแลปัญหานี้เมื่อใช้สคริปต์ในไฟล์ที่มีช่องว่างในชื่อ ซามูเอลยังชี้ให้เห็นว่าเมื่อคัดลอกและวางโค้ดจากไซต์นี้ (หรืออินเทอร์เน็ตโดยทั่วไป) ให้แน่ใจว่าได้ใส่เครื่องหมายขีดกลางและเครื่องหมายคำพูดที่เหมาะสมสำหรับ "พิมพ์ดีด" ที่มักจะแทนที่ นอกจากนี้เราจะทำอะไรเพิ่มเติมเพื่อให้แน่ใจว่าโค้ดของเรามีความถูกต้องในการคัดลอก / วางมากขึ้น;-)
อีกคนหนึ่งคือ Myles Braithwaite ตัดสินใจขยายสคริปต์ของเราเพื่อให้วันที่ปรากฏขึ้นก่อนนามสกุลไฟล์ ดังนั้นแทนที่จะเป็น
tastyfile.mp3.07_14_11-12.34.56
เราจะได้รับนี้:
tastyfile.07_14_11-12.34.56.mp3
ซึ่งช่วยให้ผู้ใช้ส่วนใหญ่สะดวกยิ่งขึ้น รหัสของเขามีอยู่ที่หน้า GitHub ลองมาดูสิ่งที่เขาใช้เพื่อดึงชื่อไฟล์
date_formatted=$(date +%Y-%m-%d_%H.%M%S) file_extension=$(echo “$1″|awk -F. ‘{print $NF}’) file_name=$(basename $1.$file_extension)
cp -iv $1 $file_name-$date_formatted.$file_extension
ฉันได้เปลี่ยนการจัดรูปแบบบิต แต่คุณสามารถเห็นได้ว่า Myles ประกาศฟังก์ชันวันที่ในบรรทัดที่ 1 ในบรรทัดที่ 2 อย่างไรก็ตามเขาใช้คำสั่ง "echo" กับอาร์กิวเมนต์แรกของสคริปต์เพื่อส่งออกชื่อไฟล์ เขาใช้คำสั่งท่อที่เอาท์พุทที่และใช้เป็นข้อมูลสำหรับส่วนถัดไป หลังจากที่ท่อ Myles เรียกใช้คำสั่ง "awk" ซึ่งเป็นโปรแกรมสแกนรูปแบบที่มีประสิทธิภาพ ใช้คำสั่ง -F flag เขาบอกคำสั่งว่าอักขระถัดไป (หลังเว้นวรรค) เป็นสิ่งที่กำหนดให้กับ "field separator" ในกรณีนี้คือช่วงเวลา
ตอนนี้ awk เห็นไฟล์ชื่อ "tastyfile.mp3" ว่าประกอบด้วย 2 ช่องคือ "tastyfile" และ "mp3" สุดท้ายเขาใช้
‘{print $NF}’
เพื่อแสดงฟิลด์สุดท้าย ในกรณีที่ไฟล์ของคุณมีหลายช่วงเวลา - ดังนั้นการทำให้ awk เห็นฟิลด์ต่างๆ - จะแสดงเฉพาะไฟล์สุดท้ายซึ่งเป็นส่วนขยายของไฟล์
ในบรรทัดที่ 3 เขาสร้างตัวแปรใหม่สำหรับชื่อไฟล์และใช้คำสั่ง "basename" เพื่ออ้างอิงทุกอย่างใน $ 1 ยกเว้น นามสกุลไฟล์ นี้จะกระทำโดยใช้ basename และให้มัน $ 1 เป็นอาร์กิวเมนต์ของตนแล้วเพิ่มช่องว่างและนามสกุลไฟล์ ส่วนขยายของไฟล์ถูกเพิ่มโดยอัตโนมัติเนื่องจากตัวแปรที่อ้างถึงบรรทัดที่ 2 สิ่งที่จะทำคือใช้เวลา
tastyfile.mp3
และเลี้ยวเข้าไป
tastyfile
แล้วในบรรทัดสุดท้าย Myles ใส่คำสั่งที่จะส่งออกทุกอย่างตามลำดับ โปรดทราบว่าไม่มีการอ้างอิงถึง $ 2 อาร์กิวเมนต์ที่สองสำหรับสคริปต์ สคริปต์นี้จะคัดลอกไฟล์ดังกล่าวลงในไดเรกทอรีปัจจุบันของคุณแทน งานที่ดีซามูเอลและไมลส์!
เรียกใช้สคริปและเส้นทาง $
เรายังกล่าวถึงในบทความพื้นฐานของเราว่าสคริปต์นี้ไม่ได้รับอนุญาตให้อ้างอิงเป็นคำสั่งตามค่าเริ่มต้น นั่นคือคุณต้องชี้ไปที่เส้นทางของสคริปต์เพื่อที่จะรัน:
./script
~/bin/script
แต่โดยการวางสคริปต์ใน ~ / bin / คุณสามารถพิมพ์ชื่อจากที่ใดก็ได้เพื่อเรียกใช้
ผู้แสดงความคิดเห็นใช้เวลาถกเถียงกันถึงความเหมาะสมของวิธีนี้เนื่องจากไม่มี distro Linux แบบใหม่ที่สร้างไดเรกทอรีดังกล่าวตามค่าเริ่มต้น นอกจากนี้ไม่มีใครเพิ่มตัวแปรตัวแปร $ PATH ตามค่าดีฟอลต์อย่างใดอย่างหนึ่งซึ่งเป็นสิ่งที่ต้องใช้เพื่อให้สคริปต์ทำงานเหมือนกับคำสั่ง ฉันงงงวยเพราะหลังจากตรวจสอบตัวแปร $ PATH ผู้แสดงความคิดเห็นถูกต้อง แต่เรียกสคริปต์ยังคงทำงานให้ฉัน ฉันพบว่าทำไมหลาย distro Linux ทันสมัยสร้างแฟ้มพิเศษในไดเรกทอรีบ้านของผู้ใช้ -.profile
การทำซ้ำคำสั่งด้วยลูป
ลองไปที่เครื่องมือที่มีประโยชน์มากที่สุดแห่งหนึ่งในคลังแสง geek เพื่อจัดการกับงานที่ทำซ้ำ ๆ: ลูป วันนี้เราจะพูดถึงเรื่อง "for" loops
เค้าร่างพื้นฐานของวงสำหรับเป็นดังนี้:
for VARIABLE in LIST; do command1 command2 … commandn done
VARIABLE สามารถเป็นตัวแปรได้ แต่ส่วนใหญ่มักใช้ตัวพิมพ์เล็ก "i" ตามอนุสัญญา รายการคือรายการของรายการ (แยกด้วยช่องว่าง) ชี้ไปที่ไฟล์ข้อความภายนอกหรือใช้เครื่องหมายดอกจัน (*) เพื่อแสดงไฟล์ใด ๆ ในไดเร็กทอรีปัจจุบัน คำสั่งที่ระบุไว้จะเว้นไว้โดยการประชุมดังนั้นจึงง่ายกว่าที่จะเห็นการทำรัง - การวางลูปในลูป (เพื่อให้คุณสามารถวนลูปในขณะที่คุณ)
เนื่องจากรายการใช้ช่องว่างเป็นตัวคั่น - นั่นคือพื้นที่หมายถึงการย้ายไปยังรายการถัดไปในรายการ - ไฟล์ที่มีช่องว่างในชื่อไม่เป็นมิตรมาก ตอนนี้เรามาทำงานกับไฟล์โดยไม่ต้องเว้นวรรคเริ่มต้นด้วยสคริปต์ง่ายๆเพื่อแสดงชื่อของไฟล์ในไดเร็กทอรีปัจจุบัน สร้างสคริปต์ใหม่ในโฟลเดอร์ ~ / bin / ชื่อ "loopscript" หากคุณจำไม่ได้ว่าจะทำอย่างไร (รวมถึงการทำเครื่องหมายว่าเป็นไฟล์ปฏิบัติการและการเพิ่มแฮชแฮช) ให้ดูที่บทความพื้นฐานเกี่ยวกับการเขียนสคริปต์ bash ของเรา
ใส่รหัสต่อไปนี้:
for i in item1 item2 item3 item4 item5 item6; do echo “$i” done
for i in *; do echo “$i” done
for i in $@; do zip archive “$i” done
สำหรับลูปสวยมาก ตอนนี้คุณสามารถเรียกใช้ฟังก์ชันแบทช์ในรายการไฟล์ได้ ตัวอย่างเช่นคุณสามารถคัดลอกอาร์กิวเมนต์ของสคริปต์ทั้งหมดลงในที่เก็บถาวรแบบซิปให้ย้ายต้นฉบับไปยังโฟลเดอร์อื่นและปลอดภัยโดยอัตโนมัติในการคัดลอกไฟล์ zip นั้นไปยังคอมพิวเตอร์ระยะไกล ถ้าคุณตั้งค่าไฟล์สำคัญกับ SSH คุณจะไม่จำเป็นต้องใส่รหัสผ่านของคุณและคุณยังสามารถบอกสคริปต์เพื่อลบไฟล์ซิปหลังจากอัพโหลดได้!
การใช้ for-loops ทำให้ง่ายต่อการทำพวงของการกระทำสำหรับไฟล์ทั้งหมดในไดเร็กทอรี คุณสามารถใช้คำสั่งต่างๆร่วมกันและใช้อาร์กิวเมนต์ได้อย่างง่ายดายเพื่อสร้างและใช้งานได้ทันทีและนี่เป็นเพียงส่วนเล็ก ๆ ของภูเขาน้ำแข็งเท่านั้น
สคริปต์ Bash คุณมีคำแนะนำหรือไม่? คุณได้สร้างสคริปต์ที่มีประโยชน์ซึ่งใช้ลูปหรือไม่? ต้องการแชร์ความคิดเห็นเกี่ยวกับซีรีส์นี้หรือไม่? ฝากความคิดเห็นบางส่วนและช่วยเหลือผู้อื่นในสคริปต์ใหม่ ๆ !
แนะนำ:
เมื่อไหร่ที่ดีกว่าที่จะใช้ #! / bin / bash แทน #! / bin / sh ใน Shell Script?
เมื่อคุณสร้างสคริปต์เชลล์ใหม่คุณต้องการตรวจสอบให้แน่ใจว่าเป็นปัญหาฟรีที่สุด แต่บางครั้งอาจทำให้สับสนเล็กน้อยในการทราบว่า shebang ใดที่เหมาะสำหรับคุณในการใช้งาน ในบันทึกนี้โพสต์ SuperUser Q & A ของวันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่สับสน
วิธีการเปลี่ยนบัญชีผู้ใช้ของคุณใน Windows Bash Shell ของ Windows 10
เมื่อคุณติดตั้ง Ubuntu หรือ Linux distribution ใหม่ใน Windows 10 คุณจะขอให้สร้างชื่อผู้ใช้ UNIX และรหัสผ่าน Bash จะเข้าสู่บัญชีผู้ใช้โดยอัตโนมัติเมื่อคุณเปิดเปลือก แต่คุณสามารถเปลี่ยนข้อมูลประจำตัวเหล่านั้นได้หากต้องการ
คู่มือการเริ่มต้นใช้งาน Shell Scripting 3: คำสั่งและเชนพื้นฐานเพิ่มเติม
คุณได้เรียนรู้วิธีสร้างสคริปต์ใช้อาร์กิวเมนต์และสร้างลูป ตอนนี้ให้ดูคำสั่งขั้นพื้นฐานเพิ่มเติมการจัดการไฟล์ข้อความและเปลี่ยนเส้นทางการป้อนข้อมูลและส่งออกไปยังไฟล์และคำสั่งอื่น ๆ
คู่มือการเริ่มต้นใช้งาน Shell Scripting: พื้นฐาน
คำว่า "shell scripting" ได้รับการกล่าวถึงบ่อยๆในฟอรัม Linux แต่ผู้ใช้จำนวนมากไม่คุ้นเคย การเรียนรู้วิธีการเขียนโปรแกรมที่ง่ายและมีประสิทธิภาพนี้สามารถช่วยให้คุณประหยัดเวลาเรียนรู้บรรทัดคำสั่งได้ดียิ่งขึ้นและลดผลงานการจัดการไฟล์ที่น่าเบื่อ
คู่มือเริ่มต้นของ Rainmeter: สถิติระบบการแสดงผลบนเดสก์ท็อปของคุณ
หากคุณเคยเห็นเครื่องเดสก์ท็อปที่ปรับเปลี่ยนขนาดใหญ่แห่งหนึ่งซึ่งบางครั้งให้ความสำคัญกับ Lifehacker คุณอาจสงสัยว่าพวกเขารวบรวมไว้ด้วยกันอย่างไรดังนั้นวันนี้เราจะเข้าชม Rainmeter อย่างรวดเร็วซึ่งเป็นอรรถประโยชน์การปรับแต่งเดสก์ทอป