1. 程式人生 > >校園網&openwrt記(三)作為啟動項

校園網&openwrt記(三)作為啟動項

  由於對linux不是很熟,剛開始的時候就想到使用最簡單的rc.local啟動項和crontab來完成這個應用。寫好獲取許可權指令碼,然後在rc.local中寫入它使它在其他服務項啟動完後自己啟動。並且寫好網路檢測指令碼,在crontab中新增,使其每分鐘執行一次,以達到斷網後仍然可以重新獲取許可權並重新pppoe撥號。
  說起來和想的一樣輕巧,但是做起來對於我這個linux新手來說可是頭疼得很。當時,查了各種資料發現很多人寫程式都是在ubuntu等發行版系統上寫C然後交叉編譯的,我當時差點就要這樣搞了(後來也玩了下,這是後話)。說來也巧,當時由於手頭緊,我買了一個較為便宜的路由,晶片是7620A的,而我的那個大神舍友買的是網件3800,既然接受了人家的吩咐,就要兩個平臺都要兼顧,想想要下兩個TOOLS和SDK就有點蛋疼,於是就去思考有沒有什麼辦法可以解決這個問題的,如果有一個像shell那樣在每個不管在什麼平臺什麼linux發行版都有的指令碼語言就好了。後來經過認真查詢,果然有這樣的指令碼語言——Lua重磅出場。當我邂逅這個小巧精妙的語言時,我深深的為它所震撼了,僅僅幾百KB大小的它就能夠做許多常用的任務,檔案操作,socket連線,協程等等,重要的是openwrt的web管理介面的後臺就是完全由lua寫出來。
  當時發現了Lua之後,我二話不說就拿它作為該應用的開發語言了。立馬上網查詢它的教程,開始了Lua的學習之路。
  這裡簡單記錄一下Lua的一些特點:

  • 宣告的變數前沒有local的都是全域性變數,而且訪問一個沒有初始化的全域性變數也不會出錯,只不過得到的結果是:nil(Lua中特殊的型別,他只有一個值:nil;一個全域性變數沒有被賦值以前預設值為nil;給全域性變數賦nil可以刪除該變數。)
g_name = "Alvin"     --全域性變數
local name = "Jack"  --區域性變數
print(g)             -->nil
print(g_name)        -->Alivin
  • Lua是動態型別語言,變數不要型別定義。Lua中有8個基本型別分別為:nil、boolean、number、string、userdata、function、thread和table。函式type可以測試給定變數或者值的型別。變數沒有預定義的型別,每一個變數都可能為任一種型別的值。
print(type("Hello world")) --> string
print(type(10.4*3))        --> number
print(type(print))         --> function
print(type(type))          --> function
print(type(true))          --> boolean
print(type(nil))           --> nil
print(type(type(X)))       --> string
  • number表示實數,Lua中沒有整數,它用double來儲存數值。
  • Lua中字串是不可以修改的。
  • 邏輯運算子有and or not。
    邏輯運算子認為false和nil是假(false),其他為真,0也是true。
    and和or的運算結果不是true和false,而是和它的兩個運算元相關。
    而not的結果返回false或者true。
a and b      -- 如果afalse,則返回a,否則返回b
a or b       -- 如果atrue,則返回a,否則返回b
  • C語言中的三元運算子a ? b : c在Lua中可以這樣實現:(a and b) or c
  • 連線運算子:兩個點..
    字串連線,如果運算元為數字,Lua將數字轉成字串。
print("Hello " .. "World")     --> Hello World
print(666 .. 666)              --> 666666
  • table的構造器是{},它的構造可以有多種形式:
t1 = {"a", "b", "c", "d"}               --索引:t1[1]="a", t1[2]="b" 索引從1開始
t2 = {x=0, y=0}                         --也可以t2={}; t2.x=0; t2.y=0; 來構造 
t3 = {['row']=0, ['column']=0}          --索引:t3['row']=0, t3['column']=0

每次呼叫建構函式,Lua都會建立一個新的table。
在建構函式中域分隔符逗號(”,”)可以用分號(”;”)替代,通常使用分號用來分割不同型別的表元素:

{x=10, y=45; "one", "two", "three"}
  • 單行註釋用:“–”,多行註釋用:“–[[ 這裡是註釋 –]]”

相關推薦

校園網&openwrt作為啟動

  由於對linux不是很熟,剛開始的時候就想到使用最簡單的rc.local啟動項和crontab來完成這個應用。寫好獲取許可權指令碼,然後在rc.local中寫入它使它在其他服務項啟動完後自己啟動。並且寫好網路檢測指令碼,在crontab中新增,使其每分鐘執行

校園網&openwrt防火牆

  弄PPTP VPN的時候,接觸了一下openwrt的防火牆工具iptables。後來查了一下資料,發現這個iptables很是有趣,如果詳細地新增各種規則(rule),那將可以構造一個強大的防火牆。這裡簡單記錄一下iptables的一些基礎。   n

校園網&openwrt斷網重連,crontab,靜態路由

  學校的pppoe伺服器似乎不希望我們pppoe撥號一直線上,所以有時候會自己斷線,或許一天,或許兩天,有時候十幾天才會斷。但是斷線後,需要重新發送獲取許可權的udp包並重新撥號才可以上網,所以為了讓路由器全部自己處理好,省得我們重新啟動路由器,我們可以簡單地

校園網&openwrt十二多線多播與mwan3

  搞多線多撥的時候,手上剛好有一個8M和一個22M的移動寬頻,8M的準備不用了,但是浪費可是很罪惡的,於是想到多線多播,並使用mwan3來負載均衡。其實mwan3就是是用iptables和iproute2協同作用達到負載均衡的。iptables主要是打mark

【Win 10 應用開發】UI Composition 劄:與 XAML 集成

單獨使用 切換 column gif 頂部 tel border 靜態 ons 除了 DirectX 遊戲開發,我們一般很少單獨使用 UI Composition ,因此,與 XAML 互動並集成是必然結果。這樣能夠把兩者的優勢混合使用,讓UI布局能夠更靈活。 說到與 X

2018 FJUT ACM校賽L題 外傳:魔王打工

cost size turn 一次 clas 選擇 output pro sum 外傳:魔王打工記(三) TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Des

linux 子系統折騰

style 簡單 翻譯軟件 linux目錄 mage visual 繼續 .com logs 所以說,英文真是個好東西,很多資料都只有英文版本,要是不懂英文,甚至你不知道這個資料的存在,更別提用蹩腳的翻譯軟件去翻譯了。wsl 的資料:https://docs.microso

微服務 SpringBoot 2.0啟動剖析之@SpringBootApplication

我原以為就一個註解,背後竟然還有3個 —— Java面試必修 引言 前面兩章我們先後認識了SpringBoot和它的極簡配置,為新手入門的學習降低了門檻,會基本的使用後,接下來我們將進一步認識SpringBoot,它為何能做到服務秒開,就來跟隨我一起分析SpringBoot執行啟動的原理吧。 啟動原理分2

電商平臺學習筆記——Mybatis啟動異常org.apache.ibatis.type.TypeException

java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadC

Exynos4412 核心移植—— 核心啟動過程分析

核心啟動所用函式如下:         與移植U-Boot 的過程相似,在移植Linux 之前,先了解它的啟動過程。Linux 的過程可以分為兩部分:架構/開發板相關的引導過程、後續的通用啟動過程。對於uImage、zImage ,它們首先進行自解壓得到vmlinux

Framework7+Framework7-vue+vue踩坑

1. Notification元件 framework7-vue沒有該元件,使用framework7的方式實現,程式碼如下: this.$f7.addNotification({ title: 'Framework7', message: 'This is a si

Python 學習成長---- Python 基本用法簡介

最近準備重新系統學習一下Python語言,著手研讀Python 3.6.1官方教程文件,於是想著不如翻譯整理出來 , 希望能幫到一起學習Python的同學們,與大家一起進步,由於水平有限,翻譯若有不妥之處,請大家指正 。   在以下示例中,輸入和輸

dhcpd開源工程 dhcpd啟動指令碼

指令碼設計:指令碼中必須包含個函式,start(),stop(),restart(),reload(),例如,鍵入service dhcpd start命令,會呼叫start函式,restart()和reload()很簡單,stop函式中kill程序,並殺出pid檔案,這裡主

Spring Boot 實踐折騰:三板斧,Spring Boot下使用Mybatis

你要搞清楚自己人生的劇本:不是你父母的續集,不是你子女的前傳,更不是你朋友的外篇。對待生命你不妨大膽冒險一點,因為好歹你要失去它。——源自尼采 開始前… 上面的金句是被轉載很多的一句話,Spring Boot也有自己的舞臺,只是這個舞臺還沒有大量展開

簡析JavaScript中的Function型別——作為值的函式

開發十年,就只剩下這套架構體系了! >>>   

ASP.NET Core系列啟動類Startup

前面講了ASP.NET Core 的專案結構,檢視完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.html ASP.NET Core 裡面一個比較重要的就是Startup.cs 類,包括載入配置,

hadoop 學習 配置啟動 yarn

一、修改配置檔案 1.修改yarn-env.sh   將java_home修改為絕對路徑 &nbs

小林求職一上來就圍繞電商系統層層提問,我太難了….

前傳   面試官:什麼是大事務?小林哥:就是 很大...的...事務??   小林求職記(二):說好的問基礎,為啥我感覺一點也不基礎呢?   二面的面試官來到來我的跟前,開始對我的簡歷進行了一番打量然後就開始了技術提問。 面試官: 看了下你在簡歷上邊有寫到過關於電商系

第一次使用Android Studio時你應該知道的一切配置:gradle目構建

gen 官方 配置文件 conf 什麽 學習 package ack 處的 ?【聲明】 歡迎轉載,但請保留文章原始出處→_→ 生命壹號:http://www.cnblogs.com/smyhvae/ 文章來源:http://www.cnblogs.com/smyhvae

Net Core目程序包管理

tro 查看 許可 get 配置文件 asp.net aspnet 如何 PE 一、創建項目 1、如何創建項目,參照上一篇文章 二、程序包介紹 1、Net Core的程序包分前後端兩種,後端用nuget,前端用bower。 2、與Net 不同,Net Core引