การรวมเปลือก Bourne และ awk


0

นี่คือไฟล์จริงของฉัน WASfile

#!/bin/sh
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
Script to Add  
read -p "Press [Enter] to continue for Installation"  

ตอนนี้ฉันต้องการวางสคริปต์ต่อไปนี้ที่Script เพื่อเพิ่มด้านบนแล้วเรียกใช้งาน WASfile เป็นสคริปต์ (ซึ่งเป็นการรวมกันของสคริปต์หรือคำสั่งจำนวนมาก)

#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1    

ฉันต้องการรวมและใช้ดังต่อไปนี้หรือเป็นวิธีที่ดีกว่าในการรวมสคริปต์ทั้งสอง

#!/bin/sh  
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1  
read -p "Press [Enter] to continue for Installation"  

ฉันไม่สามารถเรียกใช้งานสคริปต์ได้

ดังนั้นฉันพยายามแยกAWKscriptไปยังไฟล์อื่นและพยายามเรียกใช้ AWKscript นั้น แต่ปัญหาคือหลังจากแตกไฟล์ WASfile ของสคริปต์หลักจะแตกหรือล้มเหลว

#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f

BEGIN   { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"

ดังต่อไปนี้

#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token `/^#/,'
./WASfile: line 9: `/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  '

คุณอธิบายว่าสคริปต์แรกถูกเก็บไว้ในไฟล์ที่เรียกว่าWASfileแต่ในสคริปต์เดียวกันคุณกำลังแก้ไขไฟล์ที่ชื่อเดียวกันสองครั้ง ( WASfileและด้วยพา ธ เต็ม/home/wasadm/WASfile) มันควรจะเป็นไฟล์เดียวกันและคุณต้องการสร้างรหัสการแก้ไขด้วยตนเองหรือไม่? หรือคุณใช้ชื่อเดียวกันกับสคริปต์และไฟล์ที่กำลังแก้ไขโดยไม่ใช้ประโยชน์ --- ฉันขอกีดกันคุณอย่างมากจากรหัสการแก้ไขตัวเอง คุณจะต้องมีความรู้มากขึ้นเพื่อให้มันทำงานได้อย่างถูกต้อง
pabouk

คำตอบ:


0

WASfileจากคำถามของคุณผมเข้าใจว่าสคริปต์ครั้งแรกของคุณจะถูกเก็บไว้ในไฟล์ที่เรียกว่า คุณต้องตรวจสอบให้แน่ใจว่าสคริปต์มีชุดบิตที่ปฏิบัติการได้:

chmod a+x WASfile

./WASfileจากนั้นคุณสามารถรันสคริปต์: เพราะไดเรกทอรีปัจจุบันไม่ได้อยู่ในPATHตัวแปรโดยค่าเริ่มต้นคุณจะต้องระบุอย่างชัดเจนเส้นทางทั้งไดเรกทอรีปัจจุบันหรือเส้นทางที่แน่นอน.//home/wasadm/WASfile

เช่นเดียวกับสคริปต์ AWK: ทำให้สามารถเรียกใช้และเรียกใช้ได้ด้วยพา ธ ที่ระบุ

จากWASfileสคริปต์คุณสามารถเรียกมันได้เช่นเดียวกับจากบรรทัดคำสั่ง บรรทัดคำสั่งเป็นเชลล์ด้วย - เหมือนหรือคล้ายกับเชลล์ที่เรียกใช้งานสคริปต์ firs

#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasadm/WASfile
/path/to/the/AWKscript inputfile1 inputfile2 >outputfile1
read -p "Press [Enter] to continue for Installation"

รหัสด้านบนจะเรียกใช้AWKscriptสคริปต์ที่เก็บไว้ใน/path/to/theไดเรกทอรี ด้วยไฟล์เป็นพารามิเตอร์ที่มีชื่ออธิบายตนเอง ใส่ไฟล์ที่คุณต้องการ

ตัวเลือกอื่นคือเรียกใช้awkอย่างชัดเจน ในกรณีเช่นนี้คุณไม่จำเป็นต้องเปิดใช้งานบิตที่เรียกใช้ไฟล์ได้

awk -f /path/to/the/AWKscript

รหัสชิ้นสุดท้ายในคำถามจะไม่ทำงาน

ชุดค่าผสมที่พบในรหัสชิ้นสุดท้ายของคุณจะไม่ทำงาน ระบบที่เหมือน Unix ได้รับการออกแบบมาเพื่อเรียกใช้งานไฟล์ที่เรียกใช้งานได้เพียงไฟล์เดียวโดยล่ามตัวเดียว


ฉันแก้ไขคำถามตามข้อเสนอแนะของคุณ โปรดตรวจสอบ.
user2692634

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