getopts以参数形式执行diag
#!/bin/bash
#################################################################################
# Copyright(C) 2019 xxx Ltd. All rights reserved. #
# File Name :cel-led-test #
# Author :Bing Song #
# Created Time :12/2/2019 #
# Applied Porject :xx #
# How to Use :Copy this script into "root/" directory and run it directly.#
################################################################################# #Defining variables
LED_PATH="/sys/bus/i2c/devices/15-0060"
FAN_TRARY_PATH="/sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-5/i2c-10/10-0066"
DEVICE_ID=
COLOR=
TYPE=
function usage() #定义帮助内容样式
{
echo -e "Usage::\n"
echo -e "\t-a test all config"
echo -e "\t-r read operation"
echo -e "\t-w write operation"
echo -e "\t-d device id.Example with psu,-d 1 or 2"
echo -e "\t-t [system|fan|psu|sfp]"
echo -e "\t-c [red|green|off|bule|white]"
echo -e "\t-h display this help context and exit"
echo -e "Example: \n"
echo -e " -a #test all config"
echo -e " -r -t system -d 1 #get system led status"
echo -e " -r -t psu -d 1 #get psu1 led status"
echo -e " -w -t fan -d 1 -c red #set fan1 led to red"
}
function led_read(){ if [ "$TYPE" = "system" ];then#判断LED类型为system led cat "$LED_PATH"/system_led > tmp.log
data=`cat tmp.log`
printf "Reading ($TYPE) LED,value:("$data") -- :Passed \n"
rm -rf tmp.log
elif [ "$TYPE" = "psu" ];then cat "$LED_PATH"/pwr"$DEVICE_ID"_led > tmp.log
data=`cat tmp.log`
printf "Reading ($TYPE$DEVICE_ID) LED,value:("$data") -- :Passed \n"
rm -rf tmp.log
elif [ "$TYPE" = "fan" ];then
if [ "$DEVICE_ID" = "" ];then cat "$LED_PATH"/fan_led > tmp.log
data=`cat tmp.log`
printf "Reading ($TYPE) LED,value:("$data") -- :Passed \n"
rm -rf tmp.log
else
#echo "#cat $FAN_TRARY_PATH/fan"$DEVICE_ID"_led"
cat "$FAN_TRARY_PATH"/fan"$DEVICE_ID"_led > tmp.log
data=`cat tmp.log`
printf "Reading ($TYPE$DEVICE_ID) LED,value:("$data") -- :Passed \n"
rm -rf tmp.log fi
else
check_type fi
} function led_write(){
#echo "function kcs:-$OPTARG and $OPTIND"
if [ "$TYPE" = "system" ];then
#echo "#echo $COLOR > $LED_PATH/system_led"
echo $COLOR > "$LED_PATH"/system_led
if [ $? -eq 0 ];then
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Passed \n"
else
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
fi
elif [ "$TYPE" = "psu" ];then
# echo "#echo $COLOR > $LED_PATH/pwr"$DEVICE_ID"_led"
echo $COLOR > "$LED_PATH"/pwr"$DEVICE_ID"_led
if [ $? -eq 0 ];then
printf "Wrinting ($TYPE$DEVICE_ID) LED,value:("$COLOR") -- :Passed \n"
else
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
fi
elif [ "$TYPE" = "fan" ];then
if [ "$DEVICE_ID" = "" ];then
#echo "#echo $COLOR > $LED_PATH/fan_led"
echo "$COLOR" > "$LED_PATH"/fan_led
if [ $? -eq 0 ];then
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Passed \n"
else
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
fi
else
#echo "#echo $COLOR > $FAN_TRARY_PATH/fan"$DEVICE_ID"_led"
echo $COLOR > "$FAN_TRARY_PATH"/fan"$DEVICE_ID"_led
if [ $? -eq 0 ];then
printf "Wrinting ($TYPE$DEVICE_ID) LED,value:("$COLOR") -- :Passed \n"
else
printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
fi
fi
else
check_type fi }
function check_type(){ #定义函数,校验led type
if [ "$TYPE" = "psu" ];then
return 0
elif [ "$TYPE" = "fan" ];then
return 0
elif [ "$TYPE" = "system" ];then
return 0
else
return 1
fi }
function check_color_mode(){ #定义函数,校验led color 种类
if [ "$COLOR" = "red" ];then
return 0
elif [ "$COLOR" = "green" ];then
return 0
elif [ "$COLOR" = "off" ];then
return 0
else
return 1
fi } function check_device_id(){ #定义函数,校验device id
local psu_dev_arry=(1 2)
local fan_dev_arry=(0 1 2 3 4 5 6 7)
if [ "$TYPE" = "psu" ];then
for i in ${psu_dev_arry[@]}
do
if [ "$DEVICE_ID" = $i ];then
return 0
fi
done
return 1
elif [ "$TYPE" = "fan" ];then
for i in ${fan_dev_arry[@]}
do
if [ "$DEVICE_ID" = $i ];then
return 0
fi
done
return 1
fi
} function all(){ #定义函数all()去执行带--all参数的选项
#system
local color_arry=(red green off)
local test_type=(system psu fan fan-tray)
local pid=1
local psu_id=(1 2)
local fan_id=(1 2 3 4 5 6 7 8 9 10 11 12 13 14)
local ERROR_COUNT=0
printf "==================================LED TEST ALL===========================================\n"#printf进行打印格式化
printf "Type:${test_type[0]}\n"
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result #printf打印格式化,%10表示字段间距\n表回车,s表示占位符,代替后面的实际字段
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|" 1 System
for i in ${color_arry[@]}
do
echo $i > "$LED_PATH"/system_led
sleep 1
if [ $? -eq 0 ];then #判断上条命令是否执行成功
printf "%10s|\033[32m%10s\033[0m|" $i Passed #Passed字体绿色显示32m else
printf "%10s|\033[31m%10s\033[0m|" $i Failed #Failed 字体红色显示31m
ERROR_COUNT=$[$ERROR_COUNT+1]#TBD
exit 1
fi
done
printf "\n"
echo "-----------------------------------------------------------------------------------------"
printf "Type:${test_type[1]}\n"
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
echo "-----------------------------------------------------------------------------------------"
#PSU printf "|%-10s|%10s|" $pid ${test_type[1]}
for j in ${psu_id[*]}
do
for i in ${color_arry[*]}
do echo $i > "$LED_PATH"/pwr"$j"_led
sleep 1
if [ $? -eq 0 ];then
printf "%10s|\033[32m%10s\033[0m|" $i Passed else
printf "%10s|\033[31m%10s\033[0m|" $i Failed
ERROR_COUNT=$[$ERROR_COUNT+1] exit 1
fi done
printf "\n"
j=$[$j+1]
if [ "$j" = "" ];then
printf "|%-10s|%10s|" $j ${test_type[1]$j}
else
continue
fi
done
printf "\n"
echo "-----------------------------------------------------------------------------------------"
#front panle fan
printf "Type:${test_type[2]}\n"
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|" $pid ${test_type[2]}
for i in ${color_arry[@]}
do
echo $i > "$LED_PATH"/fan_led
sleep 1
if [ $? -eq 0 ];then
printf "%10s|\033[32m%10s\033[0m|" $i Passed else
printf "%10s|\033[31m%10s\033[0m|" $i Failed
ERROR_COUNT=$[$ERROR_COUNT+1] exit 1
fi done
printf "\n"
echo "-----------------------------------------------------------------------------------------"
#fan-tray
printf "Type:${test_type[3]}\n"
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
echo "-----------------------------------------------------------------------------------------"
printf "|%-10s|%10s|" $pid ${test_type[3]} for j in ${fan_id[*]}
do
for i in ${color_arry[*]}
do
echo $i > "$FAN_TRARY_PATH"/fan"$j"_led
sleep 1
if [ $? -eq 0 ];then
printf "%10s|\033[32m%10s\033[0m|" $i Passed else
printf "%10s|\033[31m%10s\033[0m|" $i Failed
ERROR_COUNT=$[$ERROR_COUNT+1] exit 2
fi
done
printf "\n"
j=$[$j+1]
if [ "$j" = "" ];then
break else printf "|%-10s|%10s|" $j ${test_type[3]}
continue
fi
done
printf "\n"
echo "-----------------------------------------------------------------------------------------"
if [ "$ERROR_COUNT" -eq 0 ];then
echo -e "All LED test results :--[ \033[32m Passed \033[0m ]"
else
echo "All LED test results :--[ \033[31m Failed \033[0m ]"
echo $ERROR_COUNT
fi
} if [ $# -lt 1 ];then #判断是否输入至少一个参数
echo "argument is os few"
usage
exit
fi
while getopts ":arwd:t:c:h" opt #命令选项结构,:表示选项后面带参数
do
case $opt in
a|all )
test_mode=all
;;
r|read )
test_mode=read
;;
w|write )
test_mode=write
;;
d|device )
DEVICE_ID=$OPTARG
;;
t|type )
TYPE=$OPTARG
;;
c|color )
COLOR=$OPTARG
;;
h|help )
usage
exit 0
;;
?)
echo "invalid argument:-$OPTARG"
usage
exit 1
;; esac
done if [ "$test_mode" = "all" ];then
all
elif [ "$test_mode" = "read" ];then check_type
if [ $? -eq 1 ];then
echo "type $TYPE not be found"
exit 1
fi
check_device_id
if [ $? -eq 1 ];then
echo "device id[:-d] $DEVICE_ID not be found"
exit 1
fi
led_read
elif [ "$test_mode" = "write" ];then check_type
if [ $? -eq 1 ];then
echo "type $TYPE not be found"
exit 1
fi
check_device_id
if [ $? -eq 1 ];then
echo "device id $DEVICE_ID not be found"
exit 1
fi
check_color_mode
if [ $? -eq 1 ];then
echo "not support $COLOR mode"
exit 1
fi led_write
else
echo "unknow option"
fi
getopts以参数形式执行diag的更多相关文章
- linux命令行传递参数定期执行PHP文件
最近在做一个项目,需要在linux下传递参数定期执行PHP文件,网上查询资料,确实有相关资料,现整理如下: 1.linux执行PHP文件 #{PHP安装bin路径} {PHP文件路径} {需要参数1 ...
- bytectf2019 boring_code的知识学习&&无参数函数执行&&上海市大学生CTF_boring_code+
参赛感悟 第三次还是第二次参加这种CTF大赛了,感悟和学习也是蛮多的,越发感觉跟大佬的差距明显,但是还是要努力啊,都大三了,也希望出点成绩.比赛中一道WEB都没做出来,唯一有点思路的只有EZCMS,通 ...
- Struts2之Action三种接收参数形式与简单的表单验证
有了前几篇的基础,相信大家对于Struts2已经有了一个很不错的认识,本篇我将为大家介绍一些关于Action接收参数的三种形式,以及简单的表单验证实现,下面进入正题,首先我们一起先来了解一下最基本的A ...
- requests接口自动化5-表单参数形式的post请求:data
post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded(表单形式) a ...
- java 方法参数的执行顺序
java方法的参数的执行顺序是从左到右还是从右到左呢? 写出一下测试程序: 1 import java.util.*; 2 import java.io.*; 3 public class Test ...
- ABAP 通过sumbit调用另外一个程序使用job形式执行-简单例子
涉及到两个程序: ZTEST_ZUMA02 (主程序) ZTEST_ZUMA(被调用的程序,需要以后台job执行) "ztest_zuma 的代码 DATA col TYPE i VALUE ...
- postgresql shell脚本传递参数并执行sql脚本并
参考: https://stackoverflow.com/questions/7389416/postgresql-how-to-pass-parameters-from-command-line ...
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...
- lr_save_var() 截取任意字符串长度,以参数形式输出(参数转变量)
Action() { char * desc=(char *)malloc(10); //定义指针变量,以变量形式存放截取到的参数值 // char * aa = "jadkshfkasd ...
随机推荐
- Caffe 笔记 (一)caffe的层与数据结构
Caffe是纯粹的C++/CUDA架构,支持命令行.Python和MATLAB接口:可以在CPU和GPU直接无缝切换: Caffe::set_mode(Caffe::GPU); Caffe的优势 1. ...
- java 面试架构篇
1.非功能需求会考虑哪些? 可用性.扩展性.性能: 2.有没有遇到过建了索引反而变慢的情况? 3.从哪些角度去设计系统? 4.代码中使用过的设计模式?
- ILM --interface logic model
1.描述接口逻辑的模型. 2.包括 netlist spef sdc def 3.所有以上文件只描述和接口相关的逻辑,其他逻辑一概排除 3.用于STA/PR/DC的hierachical flow, ...
- 粪发涂墙-tomcat
tomcat 的 JAVA_OPTS 分析设置 快乐生活你我 2019-08-12 06:07:00 JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量. 1.JVM:JAVA_OPT ...
- Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之ResponseProcessor(ACK接收)
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 紧接着上一篇文章: Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之D ...
- 解密国内BAT等大厂前端技术体系-美团点评之上篇(长文建议收藏)
引言 进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也 ...
- iOS-image图片旋转方向
https://blog.csdn.net/qq_36557133/article/details/85760469 最近在做项目的时候发现资源包内的图片的方向不对,但也不想让UI切一个新图,所以需要 ...
- http的长连接和短连接(史上最通俗!)
1.以前的误解 很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接.但终究觉得对于长连接一直懵懵懂懂的,有种抓不到关键点的感觉. 今天 ...
- 计算机二级C语言选择题错题知识点记录。
计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...
- Java的单例模式(singleton)
为什么需要单例?只因为国家的独生子女政策(当然现在可以生2个) 单例是一个很孤独的物种,因为它的类里面做多只有也仅只有它一个. 常见的是懒汉及饿汉模式, 1.懒汉,为什么这么叫,看看英文,原为lazy ...