สอนเขียน shellscript ตอนที่ 4 สคริปต์ hello.sh

บทความนี้อยู่ในกลุ่มของบทความสอนเขียน shell script ซึ่ง shell script ที่จะสอนนั้นจะใช้ bash เป็น intepreter หรือตัวแปลภาษาครับ

ผมไม่ได้เขียนบทความเกี่ยวกับ shell script  มานานมากแล้ว แต่ก็ได้วางแผนที่จะเขียนไว้เรียบร้อย  ถ้ามีเวลาว่างหรืออารมณ์พาไปผมก็จะแวะเวียนมาเขียนบทความในกลุ่มนี้ต่อไปตามที่ได้วางแผนไว้เป็นอย่างน้อย   ผู้อ่านที่ติดตามอ่านบทความของผมในกลุ่มบทความสอนเขียน shell script นี้  ถ้าต้องการให้ผมเขียนเรื่องไหนเพิ่มเติมสามารถแนะนำได้ครับ (ดูแผนการเขียนบทความของผมได้ที่ หน้านี้ครับ )

หลังจากที่เราได้เรียนรู้ syntax ของภาษาไปคร่าวๆ แล้ว ในที่นี้ผมจะกล่าวถึงการจัดเก็บไว้ในรูปแบบไฟล์สคริปต์เพื่อสามารถเรียกใช้งานซ้ำได้(reuse)

การเขียนเป็นไฟล์สคริปต์ของ bash นั้นท่านผู้อ่านจะใช้ text editor ตัวไหนในการเขียนนะครับ สำหรับผู้เริ่มต้นผมแนะนำ โปรแกรม gedit ครับ เริ่มด้วยบรรทัดขึ้นต้นเขียนในรูปแบบดังนี้

#!/bin/bash

บรรทัดนี้  ใช้สำหรับบอกให้ shell ว่าจะใช้โปรแกรม bash ที่เก็บไว้ใน /bin เป็นตัวแปรภาษา (interpreter)  เครื่องหมาย #! อ่านว่า sha-bang หรือ she-bang ก็ได้ครับ ส่วนตัวผมเองจะอ่านว่า ชาบัง(มาจากคำว่า ชา(ร์ป)+บัง(แบง))

หลังจากบรรทัดนี้แล้วก็จะเป็นลำดับคำสั่งถัดไปครับ

คราวนี้ถ้าบรรทัดไหนเจอเครื่องหมาย # ขึ้นต้นจะถือว่าข้อความหลังจากนั้นจะเป็นส่วนของคอมเมนต์ จนสิ้นสุดบรรทัดครับ

มาดูไฟล์ hello.sh กันนะครับว่าหน้าตาจะเป็นอย่างไร   ในที่นี้ผมใช้ gedit ในการเขียนไฟล์ซึ่งมันจะขึ้นสีให้ด้วยครับ

ทำการเซฟไฟล์ให้เรียบร้อย จากนั้นให้เราเปิด terminal ขึ้นมาแล้วย้ายตำแหน่งไปยังที่เก็บไฟล์ hello.sh นะครับ โดยปกติไฟล์ที่เป็น text นั้นจะมีไม่มี permission ในการรัน  ซึ่งใน terminal เวลาใช้คำสั่ง ls จะเห็นเป็นตัวอักษรสีขาว(กรณีพื้นดำ) ซึ่งหากเราจะรันสคริปต์ดังกล่าว มันจะฟ้อง error ว่า  Permission denied  ดังรูปครับ

ในขั้นตอนนี้ให้เราเปลี่ยน permission ของไฟล์ดังกล่าว ด้วยคำสั่ง chmod +x  hello.sh ครับซึ่งเมื่อเราใช้คำสั่ง ls ดูจะเห็นเป็นตัวอักษรสีเขียว ซึ่งในที่นี้ก็พร้อมที่จะรันสคริปต์ตัวนี้แล้วนะครับ การรันก็ทำได้โดยใช้คำสั่ง ./hello.sh  ครับ  (เครื่องหมาย ./ หมายถึงไฟล์นี้อยู่ในตำแหน่งปัจจุบัน เป็นการอ้างอิงแบบ relative path )  ผลลัพธ์จะออกมาดังรูปต่อไปนี้

สคริปต์ตัวนี้ผมได้ทักทายผู้ใช้ด้วยคำสั่ง

echo “Hello! My name is  Soowoi.”

ซึ่งจะพิมพ์ข้อความ “Hello! My name is Soowoi”  ในบรรทัดแรกของเอาท์พุต พร้อมขึ้นบรรทัดใหม่ส่วนประโยค

echo  -n  “What’s your name ? ”

เป็นการแสดงข้อความ “What’s your name ?” ในบรรทัดที่ 2  โดยออปชั่น -n ของคำสั่ง echo นั้นหมายถึง เมื่อพิมพ์ข้อความออกไปโดยไม่ต้องขึ้นบรรทัดใหม่

คำสั่ง  read YOURNAME  เป็นการรับค่าจากผู้ใช้เก็บไว้ในตัวแปรชื่อ YOURNAME ครับ  ซึ่งการทำงานจะมาหยุดที่บรรทัดนี้จนกว่าผู้ใช้จะป้อนข้อความลงไปแล้วกด Enter   ในที่นี้ผมจะป้อนข้อความลงไปแล้วมาดูผลลัพธ์ที่เกิดขึ้นกันนะครับ

เมื่อผมป้อนคำว่า “อับดุล” ลงไปข้อความ “อับดุล” ก็จะไปเก็บไว้ในตัวแปรชื่อว่า YOURNAME ครับ
จากนั้นประโยคคำสั่ง

echo “Nice to meet you, $YOURNAME .”

ก็จะทำงานนะครับ  ให้เราสังเกตการนำตัวแปร YOURNAME มาใช้งานในสคริปต์นะครับ จะมีการใส่เครื่องหมาย $ ไว้ข้างหน้าตัวแปรเวลาอ้างอิงเสมอ ยกเว้นตอนกำหนดค่าครับ(เราเรียกขั้นตอนนี้ว่า de-reference )  ซึ่งผลลัพธ์ที่ได้ก็คือข้อความ “Nice to meet you, อับดุล .” นั่นเองครับ

ผมก็ขอจบบทความตอนที่ 4 ในชุดสอนเขียน shellscript ไว้เพียงเท่านี้ก่อน ไว้เจอกันใหม่บทความหน้าครับ

 

 

ตัวอย่างการใช้ checkbox บน JTable

บทความนี้เป็นบทความต่อเนื่องจากบทความ ตัวอย่างการใช้งาน JTable บน Netbeans ผู้เขียนขอแนะนำให้อ่านทำความเข้าใจบทความข้างต้นก่อนอ่านบทความนี้ครับ

ในกรณีที่เราต้องการให้คอลัมน์ใดๆใน JTable แสดงผลในรูปแบบ checkbox  โดยใช้ โมเดลนั้น ข้อมูลในตำแหน่งดังกล่าวจะต้องเป็นข้อมูลชนิด boolean ในที่นี้ผมทำการแก้ไขคลาส Student จากตัวอย่างที่แล้วโดยเพิ่มแอทริบิวต์ใหม่คือ haveMobile และแก้ constructor ใหม่ดังนี้

public class Student  {

    private String id;
    private String name;
    private double gpa;
    private boolean haveMobile;

    public boolean isHaveMobile() {
        return haveMobile;
    }

    public void setHaveMobile(boolean haveMobile) {
        this.haveMobile = haveMobile;
    }

    public Student(String id, String name,double gpa,boolean haveMobile ) {
        this.id = id;
        this.name = name;
        this.gpa = gpa;
        this.haveMobile = haveMobile;
    }

    public double getGpa() {
        return gpa;
    }

    public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Read more