幾個小型 bash 例子

求下標的一個 bash 腳本

  今天很大力氣寫了一個腳本,平時很少寫, 因此這次幾乎每一行都要搜索很久才能弄出來。先說功能
  元素作爲數組下標 的一個枚舉:

enum
{
CSTR_JIE_XI_WANG_LUO_XIN_XI_BIAO,
CSTR_PIN_LV_FU_HAO_LV_TIAO_ZHI_FANG_SHI,
CSTR_WEI_ZHI_JIE_MU,
CSTR_DIAN_SHI_JIE_MU,
CSTR_GUANH_BO_JIE_MU,
CSTR_GU_PIAO_FU_WU,
CSTR_ZI_XUN_FU_WU,
CSTR_TE_SE_FU_WU,
CSTR_JIE_MU_ZHI_NAN,
CSTR_PIN_DAO_GUAN_LI,
CSTR_XI_TONG_SHE_ZHI,
CSTR_MAIN_HELP,
CSTR_HUAN_YING_SHOU_KAN,
CSTR_QAM16,
CSTR_QAM32,
CSTR_QAM64,
CSTR_QAM128,
CSTR_QAM256,
CSTR_KAI_SHI_SOU_SUO,
CSTR_PIN_LV,
CSTR_FU_HAO_LV,
CSTR_TIAO_ZHI_FANG_SHI,
CSTR_ZHENG_ZAI_BAO_CUN_JIE_MU_XIN_XI,
CSTR_SOU_SUO_YI_ZHONG_DUAN_AN_TUI_CHU_JIAN_FAN_HUI,
CSTR_NIAN_YUE_RI_SHI_FEN,
........................
STR_JEI_MU_FENG_LEI,//"節目分類",
STR_QUAN_BU_PING_DAO_LIE_BIAO,//"全部頻道列表"
STR_QUAN_BU_GUANG_BO_LIE_BIAO,//"全部廣播列表"
STR_JIE_MU_SHUO_DING,//"節目鎖定",
STR_CAI_DAN_SHUO_DING,//"菜單鎖定",
STR_JI_DING_HE_SHUO_DING,//"機頂盒鎖定",
STR_DIAN_SHI_JIE_MU_BIAN_JI,//"電視節目編輯"
STR_GUANG_BO_JIE_MU_BIAN_JI,//"廣播節目編輯"
STR_BEN_JI_XING_XI,//"本機信息"
}

  裏面可能有幾千個元素,每個元素開頭部分都是 CSTR_ 或者 STR_ ,任意給出一個元素要求出它在枚舉裏面處於第幾個–從0開始。

#!/bin/bash

m=0                                       /// 全局變量,初始化爲 0 ,累加 得出 指定元素位置
function is_macro()
{
    string1=$1                        /// 函數參數:直接用就行了,跟C語言不一樣,不用在函數實現裏面寫明
    string2=${string1:0:4}            /// 字符串固定位置截取
    string3=${string1:0:3}

    #echo $string2
    if [ "$string2" = "CSTR" ] || [ "$string3" = "STR" ];       /// 每個元素開頭部分都是 CSTR_  或者 STR_ 
    then
        a=1
        #echo "1"
        #echo $string1
    else                                                        /// 還存在函數聲明,註釋,空行 等各種情況
        #echo "0"
        a=0
    fi
    #return $?
    #then
    #echo $string2 #fi
    #echo $1
    return $a
}


for LINE in `cat /home/skyworth/work/MainCode/code/include/skgui/sky_multi_language.h` 
#echo $filecontent
do
    #echo $LINE
    is_macro $LINE                       /// 函數調用方式
    a=$?                                 /// 這裏就是返回值了!
    #echo $a
    if [ $a -eq 1 ];                     /// 如果<span style="font-family: Arial, Helvetica, sans-serif;">開頭部分都是 CSTR_  或者 STR_ </span>
    then
        #m=$(($m+1))
        test `expr match "$LINE" "$1"` -ne 0       /// 這裏的 $1 就是參數了
        a=$?                                       /// test 的測試結果只能爲0 或者 1
        #echo $a
        if [ $a -eq 0 ];                 
        then
            #echo $LINE
            echo $m
            break           
        fi
        let m=m+1                                   /// 變量自加 1
    fi
done

用上面的腳本執行命令:

./1.sh CSTR_QAM16

正好輸出13 。

筆記本 Ubuntu 下禁止觸摸板

  自己使用的筆記本按鍵沒有禁止觸摸板的功能,沒法只能自己寫個腳本來完成。
1 輸入input –list 得到輸出:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ PixArt USB Optical Mouse                  id=11   [slave  pointer  (2)]
⎜   ↳ ImPS/2 ALPS GlidePoint                    id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_FHD              id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=14   [slave  keyboard (3)]

  上面的輸出中,Virtual core pointer 表示鼠標,因爲我的鼠標是usb接口,所以用lsusb查看一下鼠標是哪個。

sina@ubuntu:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 1bcf:280b Sunplus Innovation Technology Inc. 
Bus 002 Device 003: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse

  上面中Pixart是鼠標所以 觸摸屏應當是ImPS/2 。它的ID是13。0禁用,1啓用。
輸入如下命令

$ xinput set-prop 13 "Device Enabled" 0

觸摸板被禁用。

  可以寫如下腳本來自動完成上述過程:

temp=`xinput list | grep 'ImPS/2' | awk '{print $6}' | awk -F= '{print $2}'`
xinput set-prop $temp "Device Enabled" 0

  如果換成其它筆記本也可以仿照上面的 稍微修改幾個參數就可以了!

讀文件一行,處理某一行

寫法1:

#!/bin/bash
while read line
do
      echo $line     #這裏可根據實際用途變化
done < urfile

寫法2:使用管道

#!/bin/bash
cat urfile | while read line
do
    echo $line
done

寫法3:使用循環,如果行中有空格或者tab則無法使用此方法

#!/bin/bash
for i in `cat urfile`
do
    echo $i
done
發佈了43 篇原創文章 · 獲贊 21 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章