ข้ามไปที่เนื้อหาหลัก

shell script

Function
#!/bin/bash
#!/bin/bash
function test {
   echo "test $1 $2 $3";
}
test a b c
 
Inner Function
$ outerfunc1() {
> innerfunc() { echo "Running inner function #1"; }
> echo "Running outer function #1"
> }
$ outerfunc2() {
> innerfunc() { echo "Running inner function #2"; }
> echo "Running outer function #2"
> }
$ # At this point, both outerfunc1 and outerfunc2 contain definitions of
$ # innerfunc, but since neither has been executed yet, the definitions
$ # haven't "happened".
$ innerfunc
-bash: innerfunc: command not found
$ outerfunc1
Running outer function #1
$ # Now that outerfunc1 has executed, it has defined innerfunc:
$ innerfunc
Running inner function #1
$ outerfunc2
Running outer function #2
$ # Running outerfunc2 has redefined innerfunc:
$ innerfunc
Running inner function #2

ref : http://stackoverflow.com/questions/8426077/how-to-define-a-function-inside-another-function-in-bash

: NOOP : No-op command
it's exit status is true (0)
http://unix.stackexchange.com/questions/37473/what-is-the-utility-of-the-command-in-shell-scripting-given-that-it-explicitl

exit N
exit 0 : normal shell exit
ref: http://bash.cyberciti.biz/guide/Exit_command

If
 if [[ true = true ]]; then
  echo "y";
 elif [[ true = false ]]; then
  :; 
 else
  echo "n";
 fi
 
Case
case "$1" in
whatever|whatever2)

;; 
*)

;; 
esac



For
for (( ; $#; )); 
do
$1
done

for A in "1 2 3"; do
 echo $A # 1 2 3 
done 
echo $A # 1 2 3
for A; do
    $A
done

Local variable
local var1 var2=()
var2 = empty array
Options : -i : make NAMEs have the "integer" attribute -a : make NAMEs indexed arrays (removing with +a is valid syntax, but leads to an error message) ref : http://unix.stackexchange.com/questions/202302/variable-definition-in-bash-using-the-local-keyword , http://wiki.bash-hackers.org/commands/builtin/declare  

Dollar sign
$@ : all of the parameters passed to the script
Example :
If you call `./someScript.sh` foo bar then `$@` will be equal to `foo bar`.
ref : http://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script

$# : number of args
ref : http://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables

&2
echo "hey" >&2
print hey to &2:stderr

ref : http://stackoverflow.com/questions/23489934/echo-2-some-text-what-does-it-mean-in-shell-scripting

[[ ]],  (( ))

 ref : https://robots.thoughtbot.com/the-unix-shells-humble-if
, http://mywiki.wooledge.org/BashFAQ/031

[[ -d "/path" ]] : check if directory exists
[[ ! -d "$DIRECTORY" ]] : check if directory does not exists
[[ -r "/path" ]] : is read-only
[[ -x "/path" ]] : is executable
ref : http://stackoverflow.com/questions/59838/check-if-a-directory-exists-in-a-shell-script
, http://www.freeos.com/guides/lsst/ch03sec02.html

&&, ||
&& will only be evaluated if the exit status of the left side is zero
|| will evaluate the right side only if the left side exit status is nonzero

ref : http://unix.stackexchange.com/questions/24684/confusing-use-of-and-operators

shift
shift is a bash built-in which kind of rotates the arguments. Given that the arguments provided to the script are 3 available in $1, $2, $3, then a call to shift will make $2 the new $1. a shift 2 will shift by two makeing new $1 the old $3.
ref : http://unix.stackexchange.com/questions/174566/what-is-the-purpose-of-using-shift-in-bash-scripts

pushd, popd : directory stack
ref : http://unix.stackexchange.com/questions/77077/how-do-i-use-pushd-and-popd-commands

Read
read from stdin
-a : read the data word-wise into the specified array .
Example : use read to split string

read -r col1 col2 col3 <<< "one two three" 
printf "col1: %s col2: %s col3 %s\n" "$col1" "$col2" "$col3"
Example : changing seperator by using IFS variable
IFS=":" 

or
read -a VARNAME <<< "whatever whatever"
or
echo "press any key to continue"
read -s -n 1 -p

read from file
exec 3<$FILE # redirect file to FD 3
while read -u 3 -r line
do
 echo $line
done

or

while read -u 3 line
do
    command1
    command2
done 3< <(tail -f /path/file.txt)


ref : http://wiki.bash-hackers.org/commands/builtin/read
, http://bash.cyberciti.biz/guide/Reads_from_the_file_descriptor_%28fd%29
, http://stackoverflow.com/questions/27352868/bash-file-descriptor-3-and-while-read-line
$PWD
present working directory

Array
${ARR_NAME[@]} 
If quoted, @ expands to all elements individually quoted.
Example :
for v in "${ARR_NAME[@]}" do
$v
done 
unset ARRAY[N] : Destroys the array element at index N
http://wiki.bash-hackers.org/syntax/arrays

Int
i++
Find -or
find /path/ -name '*.png' -or -name '*.jpg'
mkdir -p -p Will create nested directories, but only if they don't exist already.
mkdir -p /foo/bar/baz  # creates bar and baz within bar under existing /foo
http://superuser.com/questions/165157/what-does-mkdir-p-flag-do

[[:alnum:]_]
letter, digit, or underscore
Example
If [[ $X != [[:alnum:]_] ]]

eval
eval - construct command by concatenating arguments

foo=10 x=foo
y='$'$x
echo $y # $foo
eval y='$'$x
echo $y # 10

ref : http://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ส่งไปรษณีย์ทีละมากๆ ที่ช่องไปรษณีย์สำหรับธุรกิจ

  ถ้าเราส่งไปรษณีย์ทีละ 10 กล่องขึ้นไป สามารถไปส่งโดยใช้ช่องทางธุรกิจได้ โดยต้องกรอกใบรับฝากรวม ( Receipt for bulk Posting ) เป็นลิสต์รายการให้เขาไปด้วย โดยกรอกพัสดุแต่ละรายการ และ ไปยื่นให้เขาพร้อมกับพัสดุที่จะส่ง วิธีกรอก คือ ให้กรอกพัสดุแบบเดียวกันไว้แผ่นเดียวกัน  เช่น พัสดุ10 กล่อง กล่องขนาดเท่ากัน น้ำหนักเท่ากันหมด กรอกไว้ 1 แผ่น ถ้าน้ำหนักต่างกัน ขนาดกล่องต่างกัน กรอกแยกแผ่นไว้ดีที่สุด ซึ่งใบนี้สามารถไปขอได้ที่ไปรษณีย์ฝ่ายธุรกิจ สามารถนำมาทำใส่ A4 ก็ได้ ขอบคุณคุณพี่ amarin.ch ที่ไปรษณีย์กลาง ( BANGKOK G.P.O. ) มากๆ นะครับ สำหรับคำแนะนำ ขอบคุณที่ช่วยคีย์ให้ทีละรายการสำหรับมือใหม่ที่ยังไม่รู้ว่ามีใบรับฝากรวมอย่างผมด้วยครับ คราวหน้าผมจะทำใบรับฝากรวมไปครับ

วิธีการไป อย. กระทรวงสาธารณสุขจากหัวลำโพง

ทางไป : รถไฟฟ้า MRT หัวลำโพง ไปลงที่ สถานี กระทรวงสาธารณสุข  ถ้ากดที่ตู้ต้องเปลี่ยนไปหน้าจอสายสีม่วง สนน ราคา 48 53 บาท ต่อมอไซด์ ถ้าไป อย. 20 บาท จากหน้าทางเข้า  ถ้าฝนตกแนะนำให้โบกแท็กซี่จากข้างหน้า ข้างในหาแท็กซี่ยากมาก ถ้าจะเดินประมาณ 2.4 km ให้ระวังหลงเข้าไปรพ ศรีธัญญา รพ ศรีธัญญาพื้นที่ข้างในใหญ่มาก และเหมือนจะล้อมด้วยคลอง เหมือนจะมีทางออกแค่ทางที่เข้าไปนั่นแหละ ทางกลับ : รถเมล์ 97 จาก อย. ตรงข้ามประกันสังคม ทางที่ 1 : ถ้าจะใกล้ลงหน้าปากซอยขึ้นสายสีม่วงที่สถานีกระทรวงสาธารณสุขที่เดิม ทางที่ 2 : ผ่าน ท่าน้ำนนท์​ กลับเรือได้ ทางที่ 3 : ผ่านหน้าพระจอมพระนครเหนือด้วยนะ ผ่าน สถานีรถไฟฟ้า MRT บางซื่อ  ( จาก อย. ไป MRT บางซื่อ 17 บาท,  จาก MRT บางซื่อ ไป MRT หัวลำโพง 44 บาท นั่งกลับได้ 2 ทาง ทางหัวลำโพง กับ ไปเปลี่ยนที่ท่าพระ ไม่รู้ว่าทางไหนเร็วกว่ากัน ) ทางที่ 4 :  ผ่าน สะพานควาย  ทางที่ 5 :  นั่งถึงอนุสาวรีย์ชัยสมรภูมิได้ ค่ารถเมล์ 21 บาท ค่ารถไฟฟ้าไป BTS สะพานตากสิน 47 บาท 

OOTOYA อร่อย ^^

เมนูอาหาร กดที่รูปเพื่อดูรูปใหญ่ อร่อยๆ ^^ ตอนแรกเล็ง เมนูพิเศษของโอโตยะ ไว้ แต่สั่ง สลัดไก่ย่างถ่าน ซอสเบซิล ไป ผักเยอะมากแต่อร่อยดี ยังได้แอบชิมของคนอื่นด้วย ปลาชิมาฮอกเกะย่างถ่าน ตัวเบ้อเริ่มเลยอ่ะ รสคล้ายๆปลาช่อน แล้วก็ของหวาน ไอศกรีมในน้ำเต้าหู้ ที่พี่กุ๋ยบอกว่า เคยเข้ามาที่ร้านแล้วสั่ง อย่างเดียวมาแล้ว ถั่วแดงเขาทำได้อร่อยมาก แต่ดันไม่มีขายถั่วแดงต้มอ่ะดิ เมนูของหวาน กดที่รูปเพื่อดูรูปใหญ่ ถ้าสั่งเป็นชุด ข้าวเติมฟรี เติมไป 2 ชาม น้ำชาเขียว refill ฟรี ชาเขียวที่นี่เขาใส่งาด้วย เหมือนที่เคยกินที่ร้าน อากะ (AKA) ที่ชั้น 7 centralworld บางคนเขาไม่ชอบกัน แต่เราเฉยๆนะ ก็อร่อยดี ข้อเสีย คือ เสริฟ ช้า ไม่ควรกินไปตอนเร่งรีบ แต่ เล็งไว้ละ ไว้จะไปกินใหม่ สาขา และ เบอร์ติดต่อ กดที่รูปเพื่อดูรูปใหญ่

อยู่เหงาๆ เราไปเที่ยว - ไหว้พระขอพร ศาลเจ้าแม่ทับทิม (อาม่า), เจริญกรุง, กรุงเทพ; 天后聖母廟, 石龙軍路, 曼谷, 泰国; Thap Thim Chinese Goddess Shrine, Chareon Krung 63 Road, Bangkok, Thailand

天后聖母廟, 石龙軍路, 曼谷, 泰国 ไหว้ศาลเจ้าแม่ทับทิม ขอให้การค้าเจริญรุ่งเรือง ตำนานเจ้าแม่ทับทิมเกิดที่ตำบลตุ้ยบ๊วย เขตบ่นเซียว เกาะไหหลำ มีผู้เฒ่าแซ่พัว เป็นผู้มีความซื่อสัตย์สุจริต ทำงานขยันขันแข็ง ครั้งหนึ่งแกออกไปหาปลา โดยผูกแหเป็นช้อนดักปลา เวลาผ่านไปแกยังหาปลาไม่ได้ คืนนั้นก็ประสบความล้มเหลว เมื่อช้อนแหขึ้นมาทีไรก้อมีแต่ท่อนไม้ ด้วยความโมโหแกเลยขว้างท่อนไม้นั้นออกไปให้ไกล แต่แล้วเมื่อช้อนแหขึ้นมาใหม่ก็ปรากฏท่อนไม้ท่อนเดิมอีก ต่อจากนั้นแกก็ขว้างท่อนไม้ขึ้นฝั่ง และแกก็ฉุก คิดว่าแปลกที่ท่อนไม้ธรรมดาจะสามารถลอยทวนน้ำได้ คงจะเป็นสิ่งวิเศษ และแกก็ได้นำท่อนไม้นั้นขึ้นฝั่ง และเพ่งมองท่อนไม้นั้นพร้อมกับอธิษฐานว่า หากท่อนไม้นี้มีความศักดิ์สิทธิ์ขอให้คืนนี้จับปลาได้มาก เมื่อพ้นจากความจนแล้ว เมื่อขึ้นฝั่งจะนำท่อนไม้นี้แกะสลักเป็นเทวรูปศักดิ์สิทธิและสักการะบูชาเช้าวันไม่ให้ขาด เมื่ออธิษฐานจบแกเอาท่อนไม้นั้นวางบนหัวเรือ ปรากฏว่าช้อนเพียงสองถึงสามครั้งก็ได้ปลาตัวโตเต็มเรือ จึงนำปลาขึ้นฝั่งวันนั้นปลาของแกขายได้ราคา เพราะชาวประมงคนอื่นจับได้น้อยแกจึงมีเงินจับจ่ายใช้สอย และทุกครั้งที่แกออกหาปลา ...

รีวิว: Human Resource พนักงานใหม่โปรดรับไว้พิจารณา สปอยแหลก

a.k.a. ชนแม่งเลย หนังเป็น พี่เต๋อ ที่พร้อมจะหักมุมตลอดเวลา คาดเดาอะไรไม่ได้เลย หนังที่คิดว่าเป็นหนังคนทำงาน ดันมีฉาก เรท R มาเฉย ได้ข้อคิด แต่ไม่ได้ชอบมาก เพราะ ประเทศที่พัฒนาแล้วจะไม่มาคิดเรื่องพวกนี้เลยสักนิด  ถ้าตอนนี้ไปดูประเทศสหรัฐ (ที่กำลังบูมเรื่อง AI) ประเทศจีน (ตามมาติดๆ หรือนำไปแล้ว?) ประเทศ ไต้หวัน (ที่กำลังบูมเรื่อง เซมิคอนดักเตอร์) ประเทศเกาหลี (แซมซัง ก็ไล่มาติดๆ) ประเทศเวียดนาม (ที่ต่างชาติไปลงทุนมากๆ) จะไม่มีคำถามอะไรพวกนี้ในสมองเลย ลองไปฟังวิทยุช่องจีน ในเมืองที่เจริญๆ เมืองเศรษฐกิจ จะมีแต่ภาพ อนาคต ความหวัง ของใหม่ โรงงานใหม่ วิธีทำงานแบบใหม่ positive กว่ามาก ถ้ามัวแต่คิดเหมือนที่หนังปูในตอนแรก จะทำให้เรา ตกอยู่ใน loop นรก ซึ่งยิ่งคิดยิ่งแย่ แย่จนไม่คิดจะลงมือทำอะไรเลย เพราะจิตเป็นนายกายเป็นบ่าว สื่อ อย่าไปออกเรื่องไม่ดีมาก ออกเรื่องดีๆบ้าง เดี๋ยวคนในประเทศหวาดกลัวจนไม่กล้าทำอะไร ถึงตอนนั้นก็แย่ของจริง ตอนนี้คนประเทศอื่น ทำหนังลง Netflix กันเยอะนะครับ มีหนังใหม่ๆ ของประเทศอื่นเต็มไปหมด เช่น ฝรั่งเศส เยอรมัน สหรัฐ เกาหลี  บางอันก็ดัง บางอันก็ไม่รู้จัก 

[ AI ] IBM granite, NVIDIA robotics, IBM Langflow, watsonx, LMCache, LiteRT, Self driving car, Mamba model, RAG

 IBM granite: Time series from sensor, stock market * Forcast * Anomaly detection - classification high medium risk, data synthesis Embedding AI - 1M params - edge device - small AI Send insight --- NVIDIA * Jackson Thor robotic * Nemo ---- * IBM Langflow : open source * Watsonx (n8n) Enterprise : guardrails / log, tool using policy ----- LMcache : open source KC cache Prompt -> key value (RAGs) Same context ( e.g. same docs) Reduce operating costs CacheGen : make cache cheap to move and store CacheBlend : reuse chunk, not just prefix ---- Google มี framework ที่ optimize AI บน mobile phone นั่นคือ LiteRT : google pytorch Quantisation เท่าไหร่บน device นี้ Model explorer: quantize แล้ว error < 5% XMNpack ใช้ CPU ลดลง Google AI edge portal : benchmark AI on real device ---- Self driving car * Nvidia Alpamayo 2 model * Carla simulation Random forest -> multiple scenarios -> json -> LLM Car talk to mobile phone (cross the road) ----- Mamba model (recursive)  - alte...

มองแต่แง่ดีเถิด --- พุทธทาส

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

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท ลองอ่านดูแล้ว รู้สึกว่าฝึกสมอง ก็ทำให้คิดเลขเร็วดี เลยสรุปมาให้ ตามนี้ Tutorial 1 การลบเลข ALL FROM 9 AND THE LAST FROM 10 ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10 เช่น 1000 - 357 = 643 10,000 - 1,049 = 8951 ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า เป็น 1,000 - 083 = 917 ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย ลองทำดูสิ 1) 1000 - 777 = 2) 1000 - 283 = 3) 1000 - 505 = 4) 10,000 - 2345 = 5) 10,000 - 9876 = 6) 10,000 - 1011 = 7) 100 - 57 = 8) 1000 - 57 = 9) 10,000 - 321 = 10) 10,000 - 38 = 3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1 จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533 Tutorial 2 VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย ลอง 88x98 88 น้อยกว่า 100 อยู่ 12 98 น้อยกว่า 100 อยู่ 2 12x2 = 24 88-2 หรือ 98-12 ได้ 86 ดังนั้นตอบ 8,624 ดูอีกตัวอย่าง หรือ ลองทำนี่ดู 1) 87 x 98 = 2) 88 x ...

เฉินหลงฟัดในปี 2025 The Shadow's Edge

เริ่มดูเพราะ ฉากในลิฟต์ ที่เด้งมาใน tiktok เลยรู้สึกว่า หนังดูมีอะไรจังวะ  พอดูจริงๆ หนังมีอะไรอย่างที่คิดไว้ แม้ตอนแรกๆ ตอนปล้น อาจจะให้ความรู้สึกเหมือน Now You See Me ไปบ้าง แต่หนังมีความสนุก มีอารมณ์ความรู้สึก  มีการใส่เทคโนโลยีใหม่ๆ อย่าง เทคโนโลยีคล้ายๆกับของ Peter Theil แต่ก็ทำงานร่วมกับคนรุ่นเก่าอย่างเฉินหลงได้อย่างดี มีการสร้างตัวร้ายที่เก่งสมน้ำสมเนื้อ  และ ทิ้งท้ายว่า จะมีภาคต่ออีกต่างหาก ชอบประโยคที่ว่า "นายต้องจบงานเองได้"

ปีอธิกสุรทิน อธิกมาส อธิกวาร และ การทดปฏิทิน

 ปีที่แบ่งตามรอบพระอาทิตย์ (สุริยคติ) มี 2 แบบ คือ 1. ปกติสุรทิน คือ มี 365 วัน 2. อธิกสุรทิน คือ มี 366 วัน (เดือนกุมภาฯมี 29 วัน) การคำนวน ปีอธิกสุรทิน ตรงนี้บางท่านจะจำได้แต่เพียง ว่า หาร 4 ซึ่งไม่ใช่แค่นั้นครับ ความจริงแล้ว จะมีสูตรคำนวณที่ถูกต้องคือ ให้เอา ค.ศ.ตั้ง แล้วเอา 4 หาร หากหารลงตัวก็ใช่ ยกเว้น 100 หารลงตัว แต่หาก 400 ลงตัวก็ให้นับเป็นอธิกสุรทินด้วย (เช่น ปี 1900 ไม่เป็นอธิกสุรทิน แต่ปี 2000, 2004 เป็นปีอธิกสุรทิน) ปีที่แบ่งตามรอบพระจันทร์ (จันทรคติ) แบ่งเป็น 3 คือ 1. ปกติมาส-ปกติวาร  (บางที่เขียนย่อ เป็น ปกติมาส-วาร)       คือ ปีที่เป็นปกติ มีเดือนคู่ ข้างขึ้น 15 วัน ข้างแรม 15 วัน       และมีเดือนคี่ ข้างขึ้น 15 วัน ข้างแรม 14 วัน       รวมวันใน 1 ปี เป็น (30*6+29*6) = 354 วัน 2. ปกติมาส-ปีอธิกวาร (บางที่เรียกเป็น อธิกวาร)       คือ ปีที่เป็นปกติ แต่เดือน 7 จะมีข้างแรม 15 วัน        รวมวันใน 1 ปี เป็น 354+1 = 355 วัน 3. ปีอธิกมาส-ปกติวาร (บางที่จะเรียกเป็น อธิกมาส)     ...