openwrt 下shell 操作随笔

本文介绍了在OpenWRT环境下使用shell进行脚本开发的技巧,包括基础语法、命令执行、变量使用、数学运算、正则匹配以及字符串处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

最近一段时间在 openwrt下面使用shell进行脚本开发。开发完成后,进行整理归纳,方便后续回顾学习

shell 一些使用技巧

shell 基础知识

`` 和()(())

` cmd` (反引号) 和 $(cmd) 都表示执行 cmd指令:反引号``易看错,但更通用。$()易看,但有些shell 不支持,不过 openwrt支持。我倾向使用$()

比如:

match_ret=$(echo "${line}" | grep "\^" | grep -v grep)

或者

# 其中 tr -d '\r' 是因为该文件里面有\r\n,就是一行里面只有一个\r(回车符)
# tr -d 删除 字符 
for line in `cat ${showat_info} | tr -d '\r'`
do
    # 输出字符是 15个数字 \d 表示数字 {15} 表示重复15ci
    match_ret=$(echo ${line} | egrep '^\d{15}')

done
    

(()) 表示 数学运算

# 说明:local 必须用于函数里面
# 当 shell [] 用于test时, [ conditon ] 中 conditon 和 左右[ ] 间隔一个字符,不要挨着
function test_while_circle(){
    local count=0
    while [ ${count} -le 5 ];do
        echo ${count}
        count=$(($count + 1))
    done
}

 在(()) 中的字符可以使用$ 也可以不使用$,直接使用变量名称,如

a=5; b=7; c=2
echo $(( a+b*c ))
echo $(($a+$b*$c))

 $(( )) 还可作不同进制(如二进制、八进位、十六进制)转十进制运算

# 16# 表示 16进制,将# 后面的数值转换为10进制
echo $((16#25))
37
echo $((16#2a))
42
# 8# 8进制
echo $((8#21))
17

{}

$var 和 ${var} 都表示 获取var的值, 其中${} 表示的界限会更清晰。当然 ${}可用于 字符串删除,暂时没有使用到。参见示例:

参见网页:

https://zhuanlan.zhihu.com/p/82112596 有介绍 ${} 用于字符串删除相关

[] 、[[]] 和 (())

如上描述 [] 表示test ,与test的条件要间隔开

# -z 表示为empty,-n 表示不为空。 ${#var3} 表示var3的长度
     if [ -z ${var1} ] || [ -z ${var2} ]; then
          echo "var1 or var2 is empty then exit"
          exit
     fi

shell 使用正则匹配

比如匹配一个65.453.89.67.023 这种格式的数据,怎么匹配

匹配办法就是正则表达式:

echo 65.453.89.67.023 | egrep '\d{2}\.\d{3}\.(\d{2}\.){2}\d{3} 

这个原理可以简单匹配IP地址:xxx.xxx.xxx.xxx 但是 IP地址还有一些其他限制

正则表达式简单说明:\d 匹配数字,{2} 和 {3} 出现两次三次,

()括号里面表示一个整体。(\d{2}\,){2} 表示括号里面的内容出现了两次。

\. 中\ 转义字符,. 含有特殊含义 匹配除换行符(\n、\r)之外的任何单个字符,,转义后,就表示.

 

openwrt命令行模式命令及其工具 需要学会用ssh登录路由器用linux命令查看。 ps 命令查看当前系统运行的进程信息 free 命令查看内存使用和swap挂载情况 ls 查看目录和文件 cd 进入退出目录 vi 查看编辑配置文件 安装命令: #opkg update #opkg install nano uci set network.lan.ipaddr=[lan ip] 使用pppoe设置 Shell代码 uci set network.wan.proto=pppoe //设置wan口类型为pppoe uci set network.wan.username=[上网帐户] uci set network.wan.password=[上网密码] //这两行设置pppoe用户名和密码 如果要挂在上级路由下面,就需要进行下面的设置 Shell代码 uci set network.wan.proto=none //关掉wan uci set network.lan.gateway=[上级路由ip] //网关指向上级路由 uci set network.lan.dns=[上级路由ip] //dns指向上级路由 uci set dhcp.lan.ignore=1 //关掉lan的dhcp 最后对无线网络进行配置 Shell代码 uci set wireless.@wifi-device[0].disabled=0 //打开无线 uci set wireless.@wifi-device[0].txpower=17 //设置功率为17dbm 太高会烧无线模块 uci set wireless.@wifi-device[0].channel=6 //设置无线信道为6 uci set wireless.@wifi-iface[0].mode=ap //设置无线模式为ap uci set wireless.@wifi-iface[0].ssid=[自己设置SSID] //设置无线SSID uci set wireless.@wifi-iface[0].network=lan //无线链接到lan上 uci set wireless.@wifi-iface[0].encryption=psk2 //设置加密为WPA2-PSK uci set wireless.@wifi-iface[0].key=[密码] //设置无线密码 提交应用配置 Shell代码 uci commit //应用 /etc/init.d/network restart //重启网络服务 安装luci管理界面 Shell代码 opkg update // 更新软件列表 opkg list-installed // 查看已安装软件 opkg install luci // 安装LUCI opkg install luci-i18n-chinese // 支持中文 luci-app-firewall - 0.10.0-1 luci-i18n-english - 0.10.0-1 luci-lib-core - 0.10.0-1 luci-lib-ipkg - 0.10.0-1 luci-lib-lmo - 0.10.0-1 luci-lib-nixio - 0.10.0-1 luci-lib-sys - 0.10.0-1 luci-lib-web - 0.10.0-1 luci-mod-admin-core - 0.10.0-1 luci-mod-admin-full - 0.10.0-1 luci-proto-core - 0.10.0-1 luci-proto-ppp - 0.10.0-1 luci-sgi-cgi - 0.10.0-1 luci-theme-base - 0.10.0-1 luci-theme-openwrt - 0.10.0-1 即可完成LUCI的安装。 输入以下命令开启支持web服务的uhttpd,并设置其为自启动: Shell代码 /etc/init.d/uhttpd enable # 开机自启动 /etc/init.d/uhttpd start # 启动uhttpd - Wifidog 你可以尝试执行以下命令安装Wifidog: opkg update # Optional opkg install wifidog --sftp安装 opkg update opkg install vsftpd openssh-sftp-server /etc/init.d/vsftpd enable /etc/init.d/vsftpd start 小米端口转发命令: 通过修改 /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。 config rule 'httpdwan' option src 'wan' option dest_port '8088' option proto 'tcp' option target 'ACCEPT' option name ''\''httpd wan accept tcp port 8088'\''' 保存后,执行 /etc/init.d/firewall restart 重启防火墙。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值