几个小型 bash 例子

  • 求下标的一个 bash 脚本
  • 笔记本 Ubuntu 下禁止触摸板
  • 读文件一行处理某一行

求下标的一个 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 ];                     /// 如果"font-family: Arial, Helvetica, sans-serif;">开头部分都是 CSTR_  或者 STR_ 
    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

你可能感兴趣的:(Bash/Shell)