$ i=0;$ ((i++))$ echo $i1$ ให้ i++$ echo $i2$ expr $i + 13$ echo $i2$ echo $i 1 | awk '{printf $1+$2}'3
แสดงให้เห็น:
หมดอายุหลังจาก
$ฉัน-
-, 1 คั่นด้วยช่องว่าง หากดำเนินการคูณ ต้องหลีกตัวดำเนินการ มิฉะนั้นเชลล์จะตีความเครื่องหมายการคูณเป็นอักขระตัวแทน ส่งผลให้เกิดข้อผิดพลาดทางไวยากรณ์
โอเคด้านหลัง
$1และ
2 ดอลลาร์ตามลำดับอ้างถึง
$ฉันและ 1 คือเลขตัวที่ 1 และตัวที่ 2 จากซ้ายไปขวา
ใช้คำสั่งในตัวของเชลล์เพื่อดูประเภทของแต่ละคำสั่งดังต่อไปนี้:
$ type typetype เป็นเชลล์บิวท์อิน $ ประเภท letlet เป็นเชลล์บิวท์อิน $ ประเภท exprexpr ถูกแฮช (/usr/bin/expr)$ ประเภท bcbc ถูกแฮช (/usr/bin/bc)$ ประเภท awkawk คือ /usr/bin/awk
จะเห็นได้จากการสาธิตข้างต้น:
อนุญาตมันเป็นคำสั่งในตัวของเชลล์ และอีกหลายๆ คำสั่งเป็นคำสั่งภายนอก รวมอยู่ในนั้นทั้งหมด
/usr/binไดเรกทอรี และ
หมดอายุและ
ก่อนคริสต์ศักราชเนื่องจากเพิ่งใช้งานจึงโหลดเข้าหน่วยความจำ
กัญชาโต๊ะ. ซึ่งจะช่วยให้เราเข้าใจหลักการเบื้องหลังวิธีดำเนินการต่างๆ ของสคริปต์ที่แนะนำในบทที่แล้ว
หมายเหตุ: หากคุณต้องการดูวิธีใช้สำหรับคำสั่งต่างๆ สำหรับ
อนุญาตและ
พิมพ์รอคำสั่งในตัวของ Shell คุณสามารถใช้คำสั่งในตัวของ Shell ได้
ช่วยเพื่อดูวิธีใช้ที่เกี่ยวข้อง และคำสั่งภายนอกบางคำสั่งสามารถเข้าถึงได้ผ่านคำสั่งภายนอกของเชลล์
ผู้ชายเพื่อดูวิธีใช้ เช่น
ช่วยให้-
วิธีปฏิบัติรอ.
#!/bin/bash# calc.shi=0;ในขณะที่ [ $i -lt 10,000 ]ทำ ((i++)) เสร็จสิ้นแล้วcho $i
คำอธิบาย :ผ่านมาที่นี่
ในขณะที่ [นิพจน์แบบมีเงื่อนไข]; ทำ .... เสร็จแล้ววงจรเพื่อให้บรรลุ
-ltน้อยกว่าเครื่องหมาย
-ดูรายละเอียด
ทดสอบการใช้คำสั่ง:
การทดสอบของมนุษย์-
จะรันสคริปต์นี้ได้อย่างไร?
วิธีที่ 1: ส่งไฟล์สคริปต์โดยตรงเป็นพารามิเตอร์ของ sub-Shell (Bash)
$ bash calc.sh$ ประเภท bashbash ถูกแฮช (/bin/bash)
วิธีที่ 2: ผ่าน
ทุบตีคำสั่งในตัว
-หรือ
แหล่งที่มาดำเนินการ
$ ./calc.sh
หรือ
$ source ./calc.sh$ type .. เป็นเชลล์ในตัว $ ประเภท sourcesource คือเชลล์ในตัว
วิธีที่ 3: แก้ไขไฟล์เพื่อให้สามารถเรียกใช้งานได้และดำเนินการโดยตรงภายใต้เชลล์ปัจจุบัน
$ chmod ./calc.sh $ ./calc.sh
ต่อไป เราจะสาธิตการใช้วิธีอื่นในการคำนวณตัวแปรบวกหนึ่งทีละรายการ นั่นคือ
((ผม++))สอดคล้องกับข้อใดข้อหนึ่งต่อไปนี้:
ให้ i++;i=$(expr $i + 1)i=$(echo $i+1|bc)i=$(echo $i 1 | awk '{printf $1+$2;}')
เวลาในการคำนวณการเปรียบเทียบมีดังนี้:
$ เวลา calc.sh10000real 0m1.319suser 0m1.056ssys 0m0.036s$ เวลา calc_let.sh10000real 0m1.426suser 0m1.176ssys 0m0.032s$ เวลา calc_expr.sh1000real 0m27.425suser 0m5.060ssys 0m14.177s$ เวลา calc_bc.sh1000real 0m56.576suser 0m9.353ssys 0m24.618s$ เวลา ./calc_awk.sh100real 0m11.672suser 0m2.604ssys 0m2.660s
แสดงให้เห็น:
เวลาคำสั่งสามารถใช้เพื่อนับเวลาดำเนินการของคำสั่ง ส่วนหนึ่งของเวลานี้รวมถึงเวลาทำงานทั้งหมด เวลาดำเนินการของพื้นที่ผู้ใช้ และเวลาดำเนินการของพื้นที่เคอร์เนลที่ผ่านไป
เทรซการใช้งานการเรียกของระบบ
จากการเปรียบเทียบข้างต้นจะพบว่า
-มีประสิทธิภาพการดำเนินงานสูงสุด และ
อนุญาตเนื่องจากเป็นคำสั่งในตัวของ Shell มันก็มีประสิทธิภาพมากเช่นกันแต่
หมดอายุ-
ก่อนคริสต์ศักราช-
โอเคประสิทธิภาพการคำนวณค่อนข้างต่ำ ดังนั้น หากเชลล์สามารถทำงานที่เกี่ยวข้องให้เสร็จสิ้นได้ ขอแนะนำให้ให้ความสำคัญกับฟังก์ชันที่เชลล์จัดเตรียมไว้ให้ก่อน แต่มีฟังก์ชันบางอย่างที่ตัวเชลล์เองไม่สามารถทำได้ เช่น การดำเนินการจุดลอยตัว ดังนั้นจึงจำเป็นต้องได้รับความช่วยเหลือจากคำสั่งภายนอก นอกจากนี้ เมื่อพิจารณาถึงความสามารถในการพกพาของสคริปต์ Shell อย่าใช้ไวยากรณ์เฉพาะของ Shell เมื่อประสิทธิภาพไม่สำคัญ
อนุญาต-
หมดอายุ-
ก่อนคริสต์ศักราชสามารถใช้ค้นหาโมดูโลและตัวดำเนินการทั้งหมดได้
-,และ
อนุญาตและ
ก่อนคริสต์ศักราชสามารถใช้หาค่ายกกำลังได้
-อย่างหลังคือ
-- ตัวอย่างเช่น:
$ อธิบาย 5 % 21$ ให้ i=5%2$ echo $i1$ echo 5 % 2 | bc1$ ((i=5%2))$ echo $i1
$ ให้ i=5**2$ echo $i25$ ((i=5**2))$ echo $i25$ echo 5^2 | bc25
การแปลงฐานก็เป็นการดำเนินการที่ค่อนข้างธรรมดาเช่นกัน
ทุบตีรองรับในตัวสำหรับ
ก่อนคริสต์ศักราชตัวอย่างเช่น หากต้องการแปลง 11 เป็นฐานแปดเป็นทศนิยม คุณสามารถ:
$ echo obase=10;ibase=8;11 |. bc -l9$ echo $((8#11))9
สิ่งที่กล่าวมาทั้งหมดจะแปลงตัวเลขในระบบฐานใดระบบหนึ่งให้เป็นฐาน 10 หากคุณต้องการแปลงระหว่างระบบฐานใดๆ ก็ยังคงอยู่
ก่อนคริสต์ศักราชมีความยืดหยุ่นมากกว่าเพราะสามารถใช้งานได้โดยตรง
ไอเบสและ
อ้วนระบุแหล่งที่มาหลักและเป้าหมาย Conversion พื้นฐานตามลำดับ
หากคุณต้องการแสดงสตริงบางส่วนในฐานเฉพาะ คุณสามารถใช้ได้
อ.อคำสั่ง เช่น ตัวคั่นเริ่มต้น
ไอเอฟเอสรวมถึงช่องว่าง
แท็บเช่นเดียวกับการขึ้นบรรทัดใหม่คุณสามารถใช้
ผู้ชายแอสกี้หลักฐาน.
$ echo -n $IFS | od -c0000000 t n0000003$ echo -n $IFS | od -b0000000 040 011 0120000003
อนุญาตและ
หมดอายุไม่สามารถดำเนินการจุดลอยตัวได้ แต่
ก่อนคริสต์ศักราชและ
โอเคสามารถ.
$ echo ขนาด = 3; 1/13 |. bc.076$ echo 1 13 |.
แสดงให้เห็น:
ก่อนคริสต์ศักราชจำเป็นต้องระบุความแม่นยำเมื่อดำเนินการจุดลอยตัว มิฉะนั้น จะมีค่าเริ่มต้นเป็น 0 กล่าวคือ เมื่อดำเนินการจุดลอยตัว ผลลัพธ์เริ่มต้นจะคงไว้เพียงจำนวนเต็ม และ
โอเคมีความยืดหยุ่นสูงในการควบคุมจำนวนตำแหน่งทศนิยมเพียงแค่
พิมพ์ฉสามารถควบคุมรูปแบบได้
อาหารเสริม: ในการใช้งาน
ก่อนคริสต์ศักราชเมื่อดำเนินการหากไม่ได้ใช้
มาตราส่วนระบุความแม่นยำขณะเข้า
ก่อนคริสต์ศักราชเพิ่มหลังจาก
-ลตัวเลือก การดำเนินการจุดลอยตัวก็สามารถทำได้เช่นกัน แต่ความแม่นยำเริ่มต้นในขณะนี้คือ 20 หลัก ตัวอย่างเช่น:
$ echo 1/13100 |. bc -l.00007633587786259541
ใช้
ก่อนคริสต์ศักราช -lการคำนวณสามารถบรรลุความแม่นยำสูง:
$ ส่งออก cos=0.996293; echo scale=100; a(sqrt(1-$cos^2)/$cos)*180/(a(1)*4) | -l4.9349547554113836327198340369318406051597063986552438753727649177325495504159766011527078286004072131
แน่นอนมันยังสามารถใช้ได้
โอเคในการคำนวณ:
$ echo 0.996293 |. awk '{ printf(%sn, atan2(sqrt(1-$1^2),$1)*180/3.1415926535);}'4.93495
ชุดข้อมูลทดสอบจะถูกสร้างขึ้นแบบสุ่มที่นี่ และชื่อไฟล์คือ
รายได้.txt-
1 3 44902 5 38963 4 31124 4 47165 4 45786 6 53997 3 50898 6 30299 4 619510 5 5145
หมายเหตุ: ข้อมูลสามคอลัมน์ด้านบนคือหมายเลขครอบครัว ขนาดครอบครัว และรายได้รวมของครอบครัวต่อเดือน
วิเคราะห์: การหาครอบครัวที่มีรายได้เฉลี่ยต่อเดือนสูงสุด ต้องหาร 2 คอลัมน์ต่อไปนี้ คือ หารายได้เฉลี่ยต่อเดือนของแต่ละครอบครัว แล้วเรียงลำดับตามรายได้เฉลี่ยต่อเดือนจึงจะพบครอบครัวที่มี รายได้สูงสุด
ทำให้สำเร็จ:
#!/bin/bash# gettopfamily.sh[ $# -lt 1 ] && echo กรุณาป้อนไฟล์รายได้ && exit -1[ ! -f $1 ] && echo $1 ไม่ใช่ไฟล์ && exit -1income=$1awk '{ printf(%d %0.2fn, $1, $3/$2);}' $รายได้ | sort -k 2 -n -r
แสดงให้เห็น:
[ $# -lt 1 ]: ต้องป้อนพารามิเตอร์อย่างน้อยหนึ่งตัว
-คือจำนวนพารามิเตอร์ที่ส่งผ่านในเชลล์
[ ! -f $1 ]: ต้องการให้พารามิเตอร์อินพุตเป็นไฟล์
-ฉสำหรับการใช้งาน โปรดดู
ทดสอบคำสั่ง,
การทดสอบของมนุษย์
รายได้=$1: กำหนดพารามิเตอร์อินพุตให้กับตัวแปรรายได้ จากนั้นใช้เป็น
โอเคพารามิเตอร์นั่นคือไฟล์ที่จะประมวลผล
โอเค: แบ่งคอลัมน์ที่สามของไฟล์ด้วยคอลัมน์ที่สองเพื่อค้นหารายได้เฉลี่ยต่อเดือน โดยคำนึงถึงความแม่นยำ จึงคงความแม่นยำไว้สองหลัก
เรียงลำดับ -k 2 -n -r: นี่คือผลลัพธ์ของ
โอเคคอลัมน์ที่สองของผลลัพธ์
-เค 2คือรายได้เฉลี่ยต่อเดือนจะเรียงเรียงตามตัวเลข
-nและเรียงลำดับจากมากไปน้อย
-ร-
การสาธิต:
$ ./gettopfamily.sh Income.txt7 1696.339 1548.751 1496.674 1179.005 1144.5010 1,029.006 899.832 779.203 778.008 504.83
ภาคผนวก: ก่อนหน้า
รายได้.txtข้อมูลถูกสร้างขึ้นแบบสุ่ม เมื่อทำการทดลองบางอย่าง มักจะจำเป็นต้องสุ่มสร้างข้อมูลบางส่วน ในส่วนถัดไป เราจะแนะนำโดยละเอียด ที่นี่ถูกสร้างขึ้น
รายได้.txtสคริปต์ข้อมูล:
#!/bin/bash# genrandomdata.shfor i ใน $(seq 1 10) ทำ echo $i $(($RANDOM/8192+3)) $((RANDOM/10+3000))done
หมายเหตุ: ใช้ในสคริปต์ด้านบนด้วย
ลำดับคำสั่งจะสร้างคอลัมน์ตัวเลขตั้งแต่ 1 ถึง 10 การใช้งานโดยละเอียดของคำสั่งนี้จะแนะนำเพิ่มเติมในส่วนสุดท้ายของบทความนี้
ตัวแปรสภาพแวดล้อม
สุ่มสร้างตัวเลขสุ่มตั้งแต่ 0 ถึง 32767 ในขณะที่
โอเคของ
แรนด์()ฟังก์ชันสามารถสร้างตัวเลขสุ่มระหว่าง 0 ถึง 1
$ echo $RANDOM81$ echo |.awk '{srand(); printf(%f, rand());}'0.237788
แสดงให้เห็น:
แสนด์()เมื่อไม่มีพารามิเตอร์ เวลาปัจจุบันจะถูกใช้เป็น
แรนด์()เครื่องกำเนิดตัวเลขสุ่ม
เมล็ดพันธุ์-
สามารถผ่านไปได้
สุ่มผลรวมของตัวแปรที่ปรับขนาด
โอเคกลาง
แรนด์()เพื่อให้ได้การขยายเสียง
$ expr $RANDOM / 128$ echo |.awk '{srand(); printf(%dn, แรนด์()*255);}'
การคิด: หากคุณต้องการสุ่มสร้างที่อยู่ IP สำหรับกลุ่ม IP หนึ่ง ๆ คุณควรทำอย่างไร? ดูตัวอย่าง: Friendly รับที่อยู่ IP ที่ใช้งานได้
#!/bin/bash# getip.sh -- รับ ipaddress ที่ใช้งานได้โดยอัตโนมัติ# ผู้เขียน: falcon <[email protected]># อัปเดต: อังคาร 30 ต.ค. 23:46:17 CST 2007# ตั้งค่าเครือข่ายของคุณเอง เกตเวย์เริ่มต้น และหมดเวลาของ ping commandnet=192.168.1default_gateway=192.168.1.1over_time=2# ตรวจสอบ ipaddressping ปัจจุบัน -c 1 $default_gateway -W $over_time[ $? -eq 0 ] && echo the current ipaddress is okey! && exit -1; While :; do # clear the configuration current ifconfig eth0 down # configuration the ip address of eth0 ifconfig eth0 $net.$(($RANDOM /130 +2)) up # กำหนดค่าเส้นทางเกตเวย์เริ่มต้น เพิ่มค่าเริ่มต้น gw $default_gateway # ตรวจสอบ การกำหนดค่าใหม่ ping -c 1 $default_gateway -W $over_time # ถ้าใช้งานได้ ให้เสร็จสิ้น [ $? -eq 0 ] && พัง
หมายเหตุ: หากที่อยู่เกตเวย์เริ่มต้นของคุณไม่ใช่
192.168.1.1โปรดกำหนดค่าด้วยตนเอง
default_gateway(สามารถใช้ได้
เส้นทาง-nคำสั่งเพื่อดู) เพราะการใช้
ถ้ากำหนดค่าเมื่อกำหนดค่าที่อยู่ คุณจะไม่สามารถกำหนดค่าให้เป็นที่อยู่เกตเวย์ได้ ไม่เช่นนั้นที่อยู่ IP ของคุณจะเหมือนกับเกตเวย์ ส่งผลให้เครือข่ายทั้งหมดทำงานไม่ถูกต้อง
ที่จริงแล้ว ชุดตัวเลขสามารถสร้างได้ผ่านการวนซ้ำ แต่ทำไมไม่ลองใช้มันดูล่ะ ถ้ามีเครื่องมือที่เกี่ยวข้องกัน!
ลำดับมันเป็นเครื่องมือขนาดเล็กที่สามารถสร้างชุดตัวเลขได้ คุณสามารถระบุช่วงที่เพิ่มขึ้นของตัวเลข หรือคุณสามารถระบุตัวคั่นระหว่างตัวเลขสองตัวที่อยู่ติดกัน
$ seq 512345$ seq 1 512345$ seq 1 2 5135$ seq -s: 1 2 51:3:5$ seq 1 2 14135791113$ seq -w 1 2 1401030507091113$ seq -s: -w 1 2 1401:03:05:07:09:11:13$ seq -f 0x%g 1 50x10x20x30x40x5
การใช้งานทั่วไปมากขึ้น
ลำดับตัวอย่างเช่น สร้างลิงก์ในรูปแบบเฉพาะ จากนั้นจึงใช้
ตกลงดาวน์โหลดสิ่งเหล่านี้:
$ สำหรับฉัน ใน `seq -fhttp://thns.tsinghua.edu.cn/thnsebooks/ebook73/%02g.pdf 1 21`;do wget -c $i เสร็จแล้ว
หรือ
$ สำหรับฉันใน `seq -w 1 21`; do wget -c http://thns.tsinghua.edu.cn/thnsebooks/ebook73/$i เสร็จแล้ว
อาหารเสริม: ใน
ทุบตีเวอร์ชัน 3 ขึ้นไปใน
สำหรับวงกลม
ในด้านหลังสามารถผ่านไปได้โดยตรง
{1..5}สร้างตัวเลขตั้งแต่ 1 ถึง 5 ให้กระชับมากขึ้น (โปรดทราบว่าระหว่าง 1 ถึง 5 มีเพียงสองจุด) เช่น
$ สำหรับฉันใน {1..5}; ทำ echo -n $i;
ก่อนอื่น เรามานิยามคำกันก่อน: ชุดอักขระตัวเดียวหรือหลายตัวที่ประกอบด้วยตัวอักษร
ขั้นแรก ให้นับจำนวนครั้งของแต่ละคำ:
$ wget -c http://tinylab.org$ cat index.html |. sed -es/[^a-zA-Z]/n/g |. grep -v ^$ |
จากนั้นนับคำที่พบบ่อยที่สุด 10 อันดับแรก:
$ wget -c http://tinylab.org$ cat index.html |. sed -es/[^a-zA-Z]/n/g |. grep -v ^$ |. เรียงลำดับ -n -k 1 -r |. หัว -10 524 และ 238 แท็ก 205 href 201 คลาส 193 http 189 org 175 Tinylab 174 www 146 div 128 เรื่อง
แสดงให้เห็น:
แมวindex.html: ส่งออกเนื้อหาของไฟล์ index.html
sed -es/[^a-zA-Z]/n/g: แทนที่อักขระที่ไม่ใช่ตัวอักษรด้วยการเว้นวรรค โดยคงเฉพาะอักขระที่เป็นตัวอักษรเท่านั้น
grep -v ^$: ลบบรรทัดว่าง
เรียงลำดับ: เรียงลำดับ
ยูนิค -ซี: นับจำนวนบรรทัดเดียวกันนั่นคือจำนวนแต่ละคำ
เรียงลำดับ -n -k 1 -r: ตามคอลัมน์แรก
-เค 1ตัวเลข
-nลำดับย้อนกลับ
-รเรียงลำดับ
หัว -10: นำสิบบรรทัดแรกออก
สามารถพิจารณาได้สองแนวทาง:
นับเฉพาะคำที่ต้องนับเท่านั้น
ใช้อัลกอริทึมด้านบนเพื่อนับจำนวนคำทั้งหมด จากนั้นส่งคืนคำที่ต้องนับให้กับผู้ใช้
อย่างไรก็ตาม ทั้งสองวิธีสามารถนำไปใช้ผ่านโครงสร้างต่อไปนี้ ลองดูวิธีที่หนึ่งก่อน:
#!/bin/bash# statistic_words.shif [ $# -lt 1 ]; จากนั้น echo การใช้งาน: ชื่อฐาน $0 FILE WORDS .... exit -1fiFILE=$1((WORDS_NUM=$#-1))for n ใน $( seq $WORDS_NUM) ทำการเปลี่ยน cat $FILE | ^$ |. เรียงลำดับ |. grep ^$1$ |
แสดงให้เห็น:
ถ้าเงื่อนไขส่วนหนึ่ง: ต้องมีพารามิเตอร์อย่างน้อยสองตัว ไฟล์คำแรก และพารามิเตอร์ที่ตามมาคือคำที่จะนับ
ไฟล์=$1: รับชื่อไฟล์ซึ่งเป็นสตริงแรกหลังสคริปต์
((WORDS_NUM=$#-1)): รับจำนวนคำ ซึ่งก็คือจำนวนพารามิเตอร์ทั้งหมด
-ลบพารามิเตอร์ชื่อไฟล์ (1)
สำหรับส่วนห่วง: ผ่านก่อน
ลำดับสร้างชุดหมายเลขคำที่ต้องนับ
กะเป็นตัวแปรในตัวของเชลล์ (โปรดส่งผ่าน
ช่วยเปลี่ยนรับความช่วยเหลือ) โดยจะย้ายพารามิเตอร์ที่ผู้ใช้ส่งผ่านจากบรรทัดคำสั่งไปข้างหลังตามลำดับ และใช้พารามิเตอร์ปัจจุบันเป็นพารามิเตอร์แรก
$1,ผ่านไปแบบนี้
$1คุณสามารถสำรวจคำทั้งหมดที่ผู้ใช้ป้อนได้ (หากคุณคิดให้ดี ดูเหมือนว่าจะเป็นตัวห้อยอาร์เรย์) คุณสามารถพิจารณาได้
กะแทนที่ประโยคถัดไปด้วย
สะท้อน $1ทดสอบ
กะการใช้งาน
การสาธิต:
$ chmod +x statistic_words.sh$ ./statistic_words.sh index.html Tinylab ลินุกซ์หลาม 175 Tinylab 43 ลินุกซ์ 3 หลาม
ลองดูวิธีที่สอง เราแค่ต้องแก้ไข
กะประโยคถัดไปก็เพียงพอแล้ว:
#!/bin/bash# statistic_words.shif [ $# -lt 1 ]; แล้ว echo ข้อผิดพลาด: คุณควรป้อน 2 คำเป็นอย่างน้อย; echo การใช้งาน: basename $0 FILE WORDS .... exit -1fiFILE=$1((WORDS_NUM= $#-1)) สำหรับ n ใน $(seq $WORDS_NUM) ทำ shift cat $FILE | sed -es/[^a-zA-Z]/n/g |. grep -v ^$ |. sort | .grep $1$done
การสาธิต:
$ ./statistic_words.sh index.html Tinylab ลินุกซ์หลาม 175 Tinylab 43 ลินุกซ์ 3 หลาม
คำอธิบาย: แน่นอนว่าวิธีที่หนึ่งมีประสิทธิภาพมากกว่ามาก เพราะจะค้นหาคำที่ต้องนับล่วงหน้าแล้วจึงนับคำ ในขณะที่วิธีหลังไม่ได้เป็นเช่นนั้น จริงๆ แล้วถ้าใช้.
เกรปของ
-อีตัวเลือก เราไม่จำเป็นต้องแนะนำการวนซ้ำ แต่สามารถทำได้ด้วยคำสั่งเดียว:
$ cat index.html |. sed -es/[^a-zA-Z]/n/g |. grep -v ^$ |. sort |. grep -E ^tinylab$|^linux$ |
หรือ
$ cat index.html |. sed -es/[^a-zA-Z]/n/g |. grep -v ^$ |. sort |
คำอธิบาย : ต้องให้ความสนใจ
sedคำสั่งสามารถประมวลผลไฟล์ได้โดยตรงโดยไม่ผ่าน
แมวจากนั้นเอาต์พุตคำสั่งจะถูกส่งผ่านไปป์ไลน์ ซึ่งสามารถลดการดำเนินการไปป์ไลน์ที่ไม่จำเป็นได้ ดังนั้นคำสั่งข้างต้นจึงสามารถทำให้ง่ายขึ้นเป็น:
$ sed -es/[^a-zA-Z]/n/g index.html |. grep -v ^$ |. sort |. egrep$|^linux$ |
จะเห็นได้ว่าคำสั่งเหล่านี้
sed-
เกรป-
ยูนิค-
เรียงลำดับพวกมันมีประโยชน์มากขนาดไหน แม้ว่าพวกมันจะทำหน้าที่ง่าย ๆ ด้วยตัวเองเท่านั้น แต่พวกมันก็สามารถบรรลุสิ่งต่าง ๆ ได้ด้วยการผสมผสานบางอย่าง ยังมีคำสั่งที่มีประโยชน์มากสำหรับการนับคำอีกด้วย
สุขา -wคุณยังสามารถใช้มันได้เมื่อจำเป็น
ภาคผนวก: มีการกล่าวถึงในหนังสือ Advanced Bash-Scripting Guide ด้วย
จดคำสั่งและ
ปัจจัยคำสั่ง เนื่องจากไม่มีอยู่ในเครื่อง จึงไม่มีการทดสอบ
ปัจจัยคำสั่งสามารถสร้างจำนวนเฉพาะทั้งหมดของจำนวนเฉพาะได้ ชอบ:
$ ปัจจัย 100100: 2 2 5 5
ณ จุดนี้ การคำนวณเชิงตัวเลขของตัวอย่างการเขียนโปรแกรมเชลล์จะสิ้นสุดลง บทความนี้จะแนะนำ:
การดำเนินการจำนวนเต็ม การดำเนินการจุดลอยตัว การสร้างตัวเลขสุ่ม และการสร้างลำดับในการเขียนโปรแกรมเชลล์
ความแตกต่างระหว่างคำสั่งในตัวของเชลล์และคำสั่งภายนอก และวิธีการดูประเภทและความช่วยเหลือ
หลายวิธีในการรันสคริปต์เชลล์
คำสั่งภายนอกของเชลล์ที่ใช้กันทั่วไปหลายประการ:
sed-
โอเค-
เกรป-
ยูนิค-
เรียงลำดับรอ
ตัวอย่าง: ตัวเลขที่เพิ่มขึ้น การค้นหารายได้เฉลี่ยต่อเดือนที่ได้รับโดยอัตโนมัติ
ไอพีที่อยู่; นับจำนวนคำ
อื่นๆ: การใช้งานที่เกี่ยวข้อง เช่น รายการคำสั่ง การทดสอบเงื่อนไข ฯลฯ ได้กล่าวถึงไว้ในตัวอย่างข้างต้นแล้ว โปรดอ่านอย่างละเอียด
หากคุณมีเวลาโปรดทบทวน
คู่มือการเขียนสคริปต์ Bash ขั้นสูง
เปลือกสิบสามคำถาม
สิบสองบทความเกี่ยวกับพื้นฐานของเชลล์
คู่มือ SED
คู่มือการใช้งาน AWK
ฟอรัมสนทนาของเชลล์หลายแห่ง
LinuxSir.org
ChinaUnix.net
ฉันใช้เวลาเขียนมากกว่า 3 ชั่วโมง ขณะนี้เป็นเวลา 23:33 น. ได้เวลากลับหอพักแล้วไปนอน ฉันจะแก้ไขคำผิดและเพิ่มเนื้อหาบางส่วน ราตรีสวัสดิ์เพื่อน!
ในวันที่ 31 ตุลาคม มีการแก้ไขถ้อยคำบางส่วน เพิ่มตัวอย่างการคำนวณรายได้ครัวเรือนเฉลี่ยต่อเดือน เพิ่มข้อมูลสรุปและข้อมูลอ้างอิง และต่อท้ายรหัสทั้งหมด
การเขียนโปรแกรมเชลล์เป็นสิ่งที่น่าสนใจมากหากคุณคิดถึง: ตัวอย่างข้างต้นในการคำนวณรายได้ครัวเรือนเฉลี่ยต่อเดือนแล้วใช้
เอ็ม$ เอ็กเซลเมื่อเปรียบเทียบงานนี้ คุณจะพบว่าแบบแรกนั้นเรียบง่ายและไม่ยุ่งยาก และให้ความรู้สึกใช้งานง่าย