求下標的一個 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