$ ทุบตี < ex1
เข้าอ่านได้ครับ
เช่น1โปรแกรมในและดำเนินการ
รูปแบบทั่วไปของมันคือ:
ชื่อสคริปต์ทุบตี $ [พารามิเตอร์]
ตัวอย่างเช่น:
$ ทุบตี ex2 /usr/meng /usr/zhang
กระบวนการดำเนินการจะเหมือนกับวิธีก่อนหน้าแต่ข้อดีของวิธีนี้คือสามารถมีพารามิเตอร์อยู่หลังชื่อสคริปต์ได้จึงส่งผ่านค่าพารามิเตอร์ไปยังคำสั่งในโปรแกรมเพื่อให้สคริปต์เชลล์สามารถ จัดการหลายสถานการณ์ เช่นเดียวกับฟังก์ชัน เมื่อโทร พารามิเตอร์จริงที่สอดคล้องกันสามารถส่งผ่านตามปัญหาเฉพาะได้
หากคุณเริ่มต้นด้วยเชลล์ปัจจุบัน (เริ่มต้นด้วย
-หมายถึง) เพื่อรันสคริปต์เชลล์ คุณสามารถใช้แบบฟอร์มง่ายๆ ต่อไปนี้:
$ · ex3 [พารามิเตอร์]
ตั้งค่าการอนุญาตของเชลล์สคริปต์ให้สามารถเรียกใช้งานได้ จากนั้นจึงดำเนินการโดยตรงที่พร้อมท์
วิธีการเฉพาะ:
$ chmod a+x ex4$ ./ex4
ข้อกำหนดนี้ระบุเชลล์เฉพาะที่รันสคริปต์ที่จุดเริ่มต้นของสคริปต์เชลล์ เป็นต้น
/bin/ทุบตี-
#!/bin/bash
เชลล์ได้รับคำสั่ง (ชื่อสคริปต์) ที่ผู้ใช้ป้อนและวิเคราะห์ หากไฟล์ถูกทำเครื่องหมายว่าปฏิบัติการได้ แต่ไม่ใช่โปรแกรมที่คอมไพล์ เชลล์จะพิจารณาว่าเป็นเชลล์สคริปต์ เชลล์จะอ่านเนื้อหา ตีความ และดำเนินการ ดังนั้น จากมุมมองของผู้ใช้ การรันเชลล์สคริปต์จึงคล้ายกับการรันไฟล์ปฏิบัติการทั่วไป
ดังนั้นเชลล์สคริปต์ที่ผู้ใช้พัฒนาขึ้นสามารถอยู่ภายใต้ไดเร็กทอรีบนพาธการค้นหาคำสั่ง (โดยปกติคือ
/bin-
/usr/binฯลฯ) ให้ใช้เหมือนคำสั่งปกติ ด้วยวิธีนี้ คุณจะพัฒนาคำสั่งใหม่ของคุณเอง วิธีนี้จะสะดวกกว่าหากคุณวางแผนที่จะใช้เชลล์สคริปต์ที่เตรียมไว้ซ้ำๆ
คุณสามารถกำหนดผลการดำเนินการของคำสั่งให้กับตัวแปรได้ การทดแทนคำสั่งมีสองรูปแบบ รูปแบบหนึ่งคือการใช้ backticks เพื่ออ้างอิงคำสั่ง รูปแบบทั่วไปของมันคือ:
รายการคำสั่ง-
ตัวอย่างเช่น: เก็บชื่อพาธแบบเต็มของไดเร็กทอรีการทำงานปัจจุบันไว้ในตัวแปร dir และป้อนบรรทัดคำสั่งต่อไปนี้:
$ dir=`pwd`
อีกรูปแบบหนึ่งคือ:
$(รายการคำสั่ง)- บรรทัดคำสั่งข้างต้นสามารถเขียนใหม่เป็น:
$dir=$(pwd)
ทุบตีมีเพียงอาร์เรย์มิติเดียวเท่านั้น และไม่จำกัดขนาดของอาร์เรย์ เช่นเดียวกับภาษา C ตัวห้อยขององค์ประกอบอาร์เรย์จะมีหมายเลขเริ่มต้นจาก 0 หากต้องการรับองค์ประกอบในอาร์เรย์ ให้ใช้ตัวห้อย ตัวห้อยอาจเป็นจำนวนเต็มหรือนิพจน์ทางคณิตศาสตร์ และค่าของมันควรมากกว่าหรือเท่ากับ 0 ผู้ใช้สามารถใช้คำสั่งการกำหนดเพื่อกำหนดค่าให้กับตัวแปรอาร์เรย์ได้
รูปแบบทั่วไปของการกำหนดค่าให้กับองค์ประกอบอาร์เรย์คือ:
ชื่ออาร์เรย์ [ตัวห้อย] = ค่า,ตัวอย่างเช่น:
$ city[0]=ปักกิ่ง$ city[1]=เซี่ยงไฮ้$ city[2]=เทียนจิน
ยังสามารถใช้ได้
ประกาศคำสั่งประกาศอาร์เรย์อย่างชัดเจน รูปแบบทั่วไปคือ:
$ ประกาศ - ชื่ออาร์เรย์
รูปแบบทั่วไปสำหรับการอ่านค่าองค์ประกอบอาร์เรย์คือ:
${ชื่ออาร์เรย์[ตัวห้อย]},ตัวอย่างเช่น:
$ echo ${city[0]}ปักกิ่ง
แต่ละองค์ประกอบของอาร์เรย์สามารถกำหนดองค์ประกอบตามองค์ประกอบโดยใช้วิธีการข้างต้น หรือสามารถกำหนดร่วมกันก็ได้ รูปแบบทั่วไปของการกำหนดอาร์เรย์และการกำหนดค่าเริ่มต้นคือ:
ชื่ออาร์เรย์ = (ค่า 1 ค่า 2 ... ค่า n)
แต่ละค่าจะถูกคั่นด้วยช่องว่าง ตัวอย่างเช่น:
$ A=(นี่คือตัวอย่างของเชลล์สคริปต์)$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}นี่คือตัวอย่างสคริปต์$ echo ${ เอ[8]}
เนื่องจากมีค่าเริ่มต้น 7 ค่าในตารางค่าดังนั้น
กจำนวนองค์ประกอบก็คือ 7 เช่นกัน
เอ[8]เกินอาร์เรย์ที่กำหนด
กrange จะถือเป็นองค์ประกอบใหม่ เนื่องจากไม่มีการกำหนดค่าล่วงหน้า ค่าของมันคือสตริงว่าง
หากไม่ได้ระบุตัวห้อยขององค์ประกอบอาร์เรย์ ชื่ออาร์เรย์จะแสดงถึงองค์ประกอบอาร์เรย์ที่มีตัวห้อย 0 เช่น
เมืองเทียบเท่ากับ
เมือง[0]-
ใช้
-หรือ
-เมื่อตัวห้อย องค์ประกอบทั้งหมดในอาร์เรย์จะถูกแทนที่
$ echo ${A[*]}นี่คือตัวอย่างของเชลล์สคริปต์
$ เสียงสะท้อน ${#A[*]}7
หากคุณต้องการเขียน Shell เพื่อหาผลรวมของตัวเลขสองตัว คุณจะนำไปใช้ได้อย่างไร? เพื่อแนะนำการใช้การส่งพารามิเตอร์ ให้เขียนสคริปต์ดังนี้:
$ cat > ผลรวม addlet=$1+$2echo $sum
หลังจากบันทึกแล้ว ให้ดำเนินการ:
$ chmod a+x ./เพิ่ม$ ./เพิ่ม 5 1,015
จะเห็นได้ว่ามีการส่งผ่าน 5 และ 10 ไป
$1และ
2 ดอลลาร์นี่คือลำดับพารามิเตอร์ที่กำหนดไว้ล่วงหน้าของเชลล์ จริงๆ แล้ว คุณยังสามารถกำหนดตัวแปรก่อนแล้วจึงส่งต่อเข้าไป
ตัวอย่างเช่น แก้ไขสคริปต์ด้านบนเพื่อรับ:
ให้ผลรวม=$X+$Yecho $sum
ดำเนินการอีกครั้ง:
$ X=5 Y=10 ./เพิ่ม15
พบว่าสามารถได้รับผลลัพธ์ที่ถูกต้องอีกด้วย
ส่งออกตัวแปรสภาพแวดล้อม:
$ ส่งออก opid=จริง
เพียงเท่านี้ หากคุณต้องการให้มีผลหลังจากเข้าสู่ระบบ คุณสามารถเพิ่มได้โดยตรง
/etc/profileหรือ
~/.bashrcข้างใน.
สามารถผ่านไปได้
อ่านหากต้องการอ่านค่าตัวแปร เช่น รอให้ผู้ใช้ป้อนค่าและแสดงค่าดังกล่าว:
$ read -p กรุณาระบุค่า: input ; echo คุณป้อนค่า: $input กรุณาระบุค่า: 21500 คุณป้อนค่า: 21500
ไม่ควรแก้ไขตัวแปรเชลล์ที่สำคัญบางตัวหลังการกำหนด ดังนั้นคุณจึงสามารถตั้งค่าได้
อ่านอย่างเดียว-
$ oracle_home=/usr/oracle7/bin$ อ่านได้อย่างเดียว oracle_home
ไวยากรณ์:
ทดสอบการแสดงออกคืนค่าเป็นจริงหากนิพจน์เป็นจริง มิฉะนั้นจะส่งคืนค่าเท็จ
ขั้นแรก ให้ระบุสัญลักษณ์การเปรียบเทียบทั่วไปที่ใช้ในการเปรียบเทียบเชิงตัวเลข:
-เช่น =; -ne !=; -gt >; -ge >=;
$ ทดสอบ var1 -gt var2
ไม่ว่าไฟล์จะสามารถอ่าน เขียนได้ และปฏิบัติการได้หรือไม่นั้น ขึ้นอยู่กับว่าเป็นไฟล์ธรรมดาและเป็นไดเร็กทอรีหรือไม่:
-r; -w; -x -d;
$ test -r ชื่อไฟล์
ความยาวของสตริงเป็นศูนย์:
-z; ไม่ใช่ศูนย์:-n,ชอบ:
$ ทดสอบ -z s1
ถ้าสตริง
s1ความยาวเป็นศูนย์และส่งกลับค่าจริง
เท่ากัน
s1=s2; ไม่เท่ากันs1!=s2
มีอีกวิธีหนึ่งในการเปรียบเทียบสตริง (คุณสามารถเปรียบเทียบตามลำดับพจนานุกรมได้):
$ if [[ 'abcde' < 'abcdf' ]]; ก็เท่ากับว่าใช่ ตามที่คาดไว้
การดำเนินการที่สามารถทำได้ด้วยคำสั่งนี้คือ:
การดำเนินการทางคณิตศาสตร์:
-; การดำเนินการเชิงตรรกะ-
ชอบ:
$ i=5;expr $i+5
นอกจากนี้,
ก่อนคริสต์ศักราชเป็นเครื่องคำนวณบรรทัดคำสั่งที่สามารถคำนวณทางคณิตศาสตร์บางอย่างได้
ถ้าตัวอย่างคำสั่ง: หากพารามิเตอร์แรกเป็นชื่อไฟล์ทั่วไป ให้พิมพ์ไฟล์ในหน้าต่างๆ มิฉะนั้น หากเป็นชื่อไดเร็กทอรี ให้ป้อนไดเร็กทอรีและพิมพ์ไฟล์ทั้งหมดในไดเร็กทอรี หากไม่ใช่ไดเร็กทอรี ให้แจ้ง ข้อมูลที่เกี่ยวข้อง
ถ้า test -f $1then pr $1>/dev/lp0elif test-d $1then (cd $1;pr *>/dev/lp0)else echo $1 ไม่ใช่ทั้งไฟล์หรือ directoryfi
กรณีคำสั่งนี้เป็นคำสั่งสาขาแบบหลายทางโดยอิงจากการจับคู่รูปแบบ คำสั่งต่อไปนี้จะกำหนดว่าชุดคำสั่งใดจะถูกดำเนินการต่อไปตามอินพุตแป้นพิมพ์ของผู้ใช้
ในขณะที่ [ $reply!=y ] && [ $reply!=Y ] #คำสั่งวนซ้ำที่เราจะเรียนรู้ด้านล่างจะสะท้อน nคุณต้องการดำเนินการต่อหรือไม่(ใช่/N)c อ่านคำตอบ #อ่านเคสคีย์บอร์ด $replay ใน ( y|Y) break;; #Exit the loop (n|N) echo nnTerminatingn exit 0;; *) echo nnกรุณาตอบ y หรือ n ดำเนินการต่อ; เพื่อหลบหนีต่อไป
ไวยากรณ์:
ในขณะที่/จนถึงรายการคำสั่ง 1do รายการคำสั่ง 2done
ข้อแตกต่างคือหลังจากคำสั่งเดิมดำเนินการตารางที่ 1 หากสถานะการออกเป็นศูนย์ ให้ดำเนินการ
ทำจากนั้นรายการคำสั่ง 2 ต่อไปนี้จะกลับไปยังจุดเริ่มต้น และหลังจากที่รายการคำสั่งหลังดำเนินการรายการคำสั่ง 1 แล้ว ก็จะดำเนินการที่คล้ายกันหากสถานะการออกไม่เป็นศูนย์เท่านั้น ตัวอย่างเดียวกันกับข้างต้น
ไวยากรณ์:
สำหรับชื่อตัวแปรในตารางสตริง ให้ทำตารางคำสั่งเสร็จแล้ว
ตัวอย่าง:
FILE=test1.c myfile1.f pccn.hfor i ใน $FILEdo cd ./tmp cp $i $i.old echo $idone คัดลอกแล้ว
ตอนนี้เรามาดูการใช้งานฟังก์ชั่นในเชลล์กันก่อน มาดูตัวอย่างกันก่อน: เขียนฟังก์ชั่นแล้วเรียกมันเพื่อแสดง
สวัสดีชาวโลก!
$ cat > show# ฟังก์ชั่นคำจำกัดความ ฟังก์ชั่นแสดง{ echo $1$2;}H=Hello,W=World!# เรียกใช้ฟังก์ชันและส่งผ่านพารามิเตอร์สองตัว H และ Wshow $H $W
การสาธิต:
$ chmod 770 แสดง$./showสวัสดีชาวโลก!
คุณเห็นอะไรบางอย่างคาวไหม?
$ แสดง $H $W
เราสามารถติดตามชื่อฟังก์ชันได้โดยตรงกับพารามิเตอร์จริง
ลำดับของพารามิเตอร์จริงสอดคล้องกับ "พารามิเตอร์เสมือน"
$1,$2,$3-
หมายเหตุ: หากคุณต้องการส่งผ่านพารามิเตอร์ คุณควรทำอย่างไรหากมีช่องว่างตรงกลางพารามิเตอร์ ลองดูก่อน.
ที่จะแสดง
สวัสดีชาวโลก(มีช่องว่างระหว่างสองคำ)
ฟังก์ชั่นแสดง { echo $1}HW=สวัสดี Worldshow $HW
ถ้าตรง
แสดง $HWเป็นไปไม่ได้แน่นอนเพราะว่า
$1เท่านั้นที่ได้รับ
สวัสดีดังนั้นผลลัพธ์จะแสดงเท่านั้น
สวัสดีเหตุผลก็คือต้องใช้ตัวแปรสตริง บรรจุมันไว้
สนใจก็เรียนต่อได้เลย!
มีสิ่งทรงพลังมากมายรอคุณอยู่เช่น
ตัด-
หมดอายุ-
sed-
โอเคฯลฯ