小雨宙

Let's debug the world.

自动锁屏程序代码解读

代码解读一例,我前些天给系统增加了一个自动锁屏功能,下面文件是xssstate的核心代码。主要功能是读取系统屏保状态和等待时间,超时后自动锁屏。我看它的核心shell代码短小精练,并且包含了多个知识点。很适合拿出来给大家分享。


#!/bin/sh
# shell里开头的 #! 称作 shebang, 它后面的内容告诉shell用哪个命令来解析自己。
#
# Use xset s $time to control the timeout when this will run.
#

# 此处是一个if语句,if的语法是
# if condition ; then
#     do this;
# elif condition; then
#     do that;
# else
#     do others;
# fi
# 一对[]中间是判断条件,$#相当于c语言main函数里面的argc,是用来判断命令行参数个数的
# -lt是小于,类似的比较运算符还有-eq 相等, -ne 不等, -le 小于等于, -gt 大于, -ge 大于等于。
# 如果[]中间有多个运算,可以-a 表示 and, -o 表示 or.

if [ $# -lt 1 ]; 
then
	printf "usage: %s cmd\n" "$(basename $0)" 2>&1
	exit 1
fi
# $1 表示第一个参数, $2...以此类推,
# $0 比较特殊,表示脚本文件自身。
# 这里cmd=赋值后,后面就可以用$cmd来表示这个变量的值。
cmd="$1"

# 下面是一个while语句,语法是
# while condition ; do
#     do something;
# done
# shell里面的true/false,都是命令。
# # file /bin/true
# /bin/true: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=32c992f2f7265996a76ca416c229b92f4c9edcf4, stripped
# 甚至if后面那个“[”也是命令。file /usr/bin/\[
# 不信你看
# # file /bin/\[
# /usr/bin/[: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=7d32dcaf08fd2f793f4e919bebb20994bcfea1b9, stripped 
# shell里面有一个特殊的 $? 代表前面命令的返回值。shell的返回值定义跟 C 一致,返回的数值表示错误码。true是0值,false是非零值,不像php,python,java,js等语言。
# true ; echo $?
# 0
# false; echo $?
# 1

while true
do
# 这里又是if语句,但是有个新知识点。
# $() 跟 `` (反引号)功能一样,会返回命令的标准输出内容。
# 注意:shell命令的“输出”和“返回值”是两个概念。
# 这里还引入了一个比较运算符 != ,它表示字符串的比较,而前面提到的 -ne 只是数值的比较。
# 注意shell条件语句里面的 = 和 == 意义是一样的,都是在判断两个字符串是否相同。
# 
	if [ $(xssstate -s) != "disabled" ];
	then
# 这里又有一个新的运算,数学运算符。$(( 数学运算式 ))。
# 有一种等同写法是用 let 语句,下面这行也可以写成 let tosleep=$(xssstate -t) / 1000
		tosleep=$(($(xssstate -t) / 1000))
# 聪明的你,下面这个 if 不用我解释了吧。
		if [ $tosleep -le 0 ];
		then
			$cmd
		else
# sleep 命令可以传整数,也可以传浮点数,但是不能接受负数。
			sleep $tosleep
		fi
	else
		sleep 10
	fi
done

博文最后更新时间:


评论

  • 暂无评论

发表评论

博客统计

访问量:3626

博文总数:9 评论总数:1

原创9 翻译0 转载0