Linuxstart - L3 Vim + L4 Shell

L4 Shell

Style Guide

variable name in uppercase
Local variables lowercase
Function names lowercase
Local variables add local

Intro and variable

echo -e enable backslash -n do not output the trailing newline
# 1. comment
:<<EOF
mulit-line 
comment
EOF
${} is refer to variable
$[] is Numeral Calculations
$() is Command substitution

Operator

String

Array

Conditon

[ ] is same as test

Loop

Function

Lib

Demo

  • Guessing game
#!/bin/bash
# Guessing game
# 1. generates a random number and guess
answer=$(date +%s%N | cut -c16-17)
count=0
while :
do
    # Note the number of times of selection
    count=$[count+1]
    echo -n "Enter a number between 0 and 99:"
    # 2. Get User Input
    read aNum
    # 3. If so, then exit
    if [ $aNum -eq  $answer ]
    then
        # If you guess right, exit
        echo "Congratulations, you guessed it! You guess $count times"
        break;
        # 4. If the answer is less than or greater than, then prompt 
    elif [ $aNum -lt  $answer ]
    then
        echo "No, more!"
    else
        echo "No, less!"
    fi
done
  • Get the current CPU usage
#!/bin/bash
# Get the current CPU usage
cpu_usage_rate(){
    local line=$(cat /proc/stat | grep -B1 -m1  "cpu" | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8" "$9}')
    local user=$(echo $line | awk '{print $1}')
    local nice=$(echo $line | awk '{print $2}')
    local system=$(echo $line | awk '{print $3}')
    local idle=$(echo $line | awk '{print $4}')
    local iowait=$(echo $line | awk '{print $5}')
    local irq=$(echo $line | awk '{print $6}')
    local softirq=$(echo $line | awk '{print $7}')
    local steal_time=$(echo $line | awk '{print $8}')
    local guest=$(echo $line | awk '{print $9}')
    local cpu_total=$[user+nice+system+idle+iowait+irq+softirq+steal_time+guest]
    local cpu_used=$[user+nice+system+iowait+irq+softirq+steal_time+guest]
    
    # $[cpu_used/cpu_total] The default is an integer
    # Reserved two precision
    local rate=$(awk 'BEGIN{printf "%.2f\n",'$[cpu_used*100]'/'$cpu_total'}')
    echo "CPU Usage: $rate%"
}

cpu_usage_rate
  • Probing the local network
#!/bin/bash

# Detecting an IP address is unobstructed
test_ping(){
    local ip=$1
    if [ -z "$ip" ]
    then
        echo "Parameters can not be empty"
        return
    fi
    
    ping -c1 $ip &>/dev/null
    
    # if [ $? -eq 0 ]
    # then
    #     echo "$ip on"
    # else
    #     echo "$ip off"
    # fi
    [ $? -eq 0 ] && echo "$ip on" || echo "$ip off"
}


for ((i=1; i<255; i++))
do
    test_ping "192.168.31.$i" &
done

# Concurrency
wait
echo "Finished"
  • Write log
#!/bin/bash


log_path="./tmp/"
log_file="my.log"
log_fullpath="$log_path$log_file"

# 1. Check log file
check_log(){
    
    # Create file if not exits 
    if [ ! -d $log_path ]; then
        mkdir -p $log_path
    fi
    
    # Create file if not exits 
    if [ ! -f $log_fullpath ]; then
        touch "$log_fullpath"
    fi
    
    # Whether the file is readable
    if [ ! -r $log_fullpath ]; then
        echo "$log_fullpath  文件不可读"
        return 1
    fi
    
    # If the file is writable
    if [ ! -w $log_fullpath ]; then
        echo "$log_fullpath  文件不可写"
        return 1
    fi
    return 0
}

# 2. Backup log
backup_log(){
    # Get File Size
    local size=`ls -l $log_fullpath | awk '{print $5}'`
    if [ $size -gt 1024 ]; then
        local back_file="$log_path`date +'%Y%m%d-%H%M%S'`.log"
        mv -f $log_fullpath $back_file
        echo "Backed up to $back_file"
    fi
    return
}


# 3. Write log file
write_log(){
    check_log
    if [ $? -ne 0 ]; then
        return 1
    fi
    
    backup_log
    local now_time=`date +'%Y-%m-%d %H:%M:%S'`
    echo "[$now_time] $1" | tee -a ${log_fullpath}
    return 0
}

write_log '####################################################'
write_log 'log write testing string 11'
write_log 'log write testing string 22'
write_log '----------------------------------------------------'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352