今天很大力气写了一个脚本,平时很少写, 因此这次几乎每一行都要搜索很久才能弄出来。先说功能
元素作为数组下标 的一个枚举:
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 。
自己使用的笔记本按键没有禁止触摸板的功能,没法只能自己写个脚本来完成。
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