local fs = require "nixio.fs" local sys = require "luci.sys" m = Map("nettask", translate("openwrt自定义shell脚本"), translate( "这是一个由用户自由编写shell脚本的界面工具,它支持立即执行、开机执行、定时执行、按下物理按键时执行,执行系统命令时确保不会对系统造成影响!!!
您对此插件有疑问?点此转到教程:https://www.yuque.com/g/mschool/akifsq/tply0gh1p17k7cu5/collaborator/join?token=kM5RSN3g7g8RRiCI&source=doc_collaborator# 《网页抓包认证方法》")) s = m:section(TypedSection, "nettask") s.anonymous = true s:tab("config", translate("立刻执行"), translate("单击下方按钮即可立即运行/停止脚本,支持死循环,但是需要避免空操作,以免造成资源浪费!!")) conf1 = s:taboption("config", Value, "editconf", nil, translate( "温馨提示:#号后面的内容为注释,如果对脚本进行了修改(或首次编辑),请先保存后再运行")) conf1.template = "cbi/tvalue" conf1.rows = 20 conf1.wrap = "off" function conf1.cfgvalue(self, section) return fs.readfile("/etc/nettask/duan.sh") or "" end function conf1.write(self, section, value) if value then value = value:gsub("\r\n?", "\n") fs.writefile("/tmp/duan.sh", value) if (luci.sys.call("cmp -s /tmp/duan.sh /etc/nettask/duan.sh") == 1) then fs.writefile("/etc/nettask/duan.sh", value) end fs.remove("/tmp/duan.sh") end end local pid = luci.sys.exec("pgrep -f '/etc/nettask/duan.sh'") if pid == "" then detect = s:taboption("config", Button, "block_detect", translate("执行脚本"), translate("按下立刻执行脚本")) detect.inputstyle = "reload" function detect.write() luci.sys.call("sh /etc/nettask/duan.sh &") luci.http.redirect(luci.dispatcher.build_url("admin", "system", "NetTask")) end else detect = s:taboption("config", Button, "block_detect", translate("停止脚本"), translate("按下立刻停止脚本")) detect.inputstyle = "reload" function detect.write() luci.sys.call("pgrep -f /etc/nettask/duan.sh | xargs kill -9 >/dev/null 2>&1") luci.http.redirect(luci.dispatcher.build_url("admin", "system", "NetTask")) end end s:tab("config2", translate("启动时执行"), translate("此脚本在系统启动时自动执行(可选)")) conf2 = s:taboption("config2", Value, "nertu", nil, translate( "温馨提示:保存后此脚本会立即运行一次,而后只会在系统启动初始化阶段运行")) conf2.template = "cbi/tvalue" conf2.rows = 20 conf2.wrap = "off" function conf2.cfgvalue(self, section) return fs.readfile("/etc/nettask/word.sh") or "" end function conf2.write(self, section, value) if value then value = value:gsub("\r\n?", "\n") fs.writefile("/tmp/word.sh", value) if (luci.sys.call("cmp -s /tmp/word.sh /etc/nettask/word.sh") == 1) then fs.writefile("/etc/nettask/word.sh", value) end fs.remove("/tmp/word.sh") end end k1 = s:taboption("config2", Flag, "word", translate("启用脚本"), translate("取消时将停用该脚本")) s:tab("config3", translate("按下按钮时执行"), translate("当前插件会覆盖默认按钮事件,短按按钮执行此脚本(注意:轻按一下快速松开即可,不要超过1秒,否则会重启路由器,超过五秒会重置路由器!!)")) conf3 = s:taboption("config3", Value, "editcon", nil, translate( "温馨提示:#号后面的内容为注释,如果对脚本进行了修改(或首次编辑),请先保存后再运行")) conf3.template = "cbi/tvalue" conf3.rows = 20 conf3.wrap = "off" function conf3.cfgvalue(self, section) return fs.readfile("/etc/nettask/button.sh") or "" end function conf3.write(self, section, value) if value then value = value:gsub("\r\n?", "\n") fs.writefile("/tmp/button.sh", value) if (luci.sys.call("cmp -s /tmp/button.sh /etc/nettask/button.sh") == 1) then fs.writefile("/etc/nettask/button.sh", value) end fs.remove("/tmp/button.sh") end end k2 = s:taboption("config3", Flag, "button", translate("启用脚本"), translate("取消时将停用该脚本")) s:tab("config4", translate("断网时执行"), translate("此脚本在网络断开时执行(可选),此脚本应该注意避免死循环,否则可能会反复创建进程")) conf4 = s:taboption("config4", Value, "networ", nil, translate( "温馨提示:#号后面的内容为注释,如果对脚本进行了修改(或首次编辑),请先保存后再运行")) conf4.template = "cbi/tvalue" conf4.rows = 20 conf4.wrap = "off" function conf4.cfgvalue(self, section) return fs.readfile("/etc/nettask/network.sh") or "" end function conf4.write(self, section, value) if value then value = value:gsub("\r\n?", "\n") fs.writefile("/tmp/network.sh", value) if (luci.sys.call("cmp -s /tmp/network.sh /etc/nettask/network.sh") == 1) then fs.writefile("/etc/nettask/network.sh", value) end fs.remove("/tmp/network.sh") end end k3 = s:taboption("config4", Flag, "network", translate("启用脚本"), translate("取消时将停用该脚本")) f3 = s:taboption("config4", Value, "nettime", translate("时间间隔(秒)"), translate("您希望多久检测一次网络状态?
提示:此值应为>=1的整数")) f3.default = "30" s:tab("config5", translate("定时执行"), translate("此脚本在规定时间内执行(可选),此脚本应该注意避免死循环,否则可能会反复创建进程")) conf5 = s:taboption("config5", Value, "crcode", nil, translate( "温馨提示:#号后面的内容为注释,如果对脚本进行了修改(或首次编辑),请先保存后再运行")) conf5.template = "cbi/tvalue" conf5.rows = 20 conf5.wrap = "off" function conf5.cfgvalue(self, section) return fs.readfile("/etc/nettask/timing.sh") or "" end function conf5.write(self, section, value) if value then value = value:gsub("\r\n?", "\n") fs.writefile("/tmp/timing.sh", value) if (luci.sys.call("cmp -s /tmp/timing.sh /etc/nettask/timing.sh") == 1) then fs.writefile("/etc/nettask/timing.sh", value) end fs.remove("/tmp/timing.sh") end end k4 = s:taboption("config5", Flag, "timi", translate("启用脚本"), translate("取消时将停用该脚本")) f4 = s:taboption("config5", Value, "minute", translate("分(0~59)")) f4.default = "0" f5 = s:taboption("config5", Value, "shi", translate("时(0~23)")) f5.default = "8" f6 = s:taboption("config5", Value, "day", translate("日(1~31)")) f6.default = "*" f7 = s:taboption("config5", Value, "month", translate("月(1~12)")) f7.default = "*" f8 = s:taboption("config5", Value, "week", translate("周(1~7)"), translate( "在以上输入框中,您可以输入指定时间来定时运行脚本。如果不想指定特定值,可以使用 '*' 表示 '任何数'。

以下是一些示例:

- 如果周的值为 '*',则表示每周的每天指定时间都会执行脚本。
- 您可以指定多个值或范围,使用逗号分隔多个指定值。例如,周的值为 '1,2,3' 表示每周的周一、周二和周三都会执行脚本。您还可以使用 '-' 表示范围,例如 '1-3' 表示从周一到周三都会执行脚本。
- 您还可以使用 '/' 和 '*' 组合来表示某个值需要满足整除关系才执行脚本。例如,分钟的值为 '*/30' 表示每个小时的0分和30分时执行脚本。

请注意,只有当每个时间条件都满足时,脚本才会执行。同时,请确保使用英文输入法输入所有符号,否则可能无法正常执行。
")) f8.default = "*" m.on_commit = function(self) luci.sys.call("/etc/init.d/nettask start") end return m