python

print
%d 整數列印
%f float列印
%s string列印
%e 科學記號列印
%5d 固定列印 5位元 整數 ,少於5位元 左邊自動填入空白,大於5位元全部列印
%5s 固定列印 5位元 string ,少於5位元 左邊自動填入空白 ,大於5位元全部列印
%8.2f 固定列印 8位元 float 含小數點
%-8.2f 固定列印 8位元 float 含小數點 -右邊自動填入空白

發表於 python | 發表迴響

帶入關聯陣列

#!/bin/bash
#請先確認 bash 4.0 以上
file=/etc/sh/3
wcl=$(awk -F":" ‘{print $1}’ $file |wc -l)
echo wcl=$wcl
sleep 1s
declare -A sshadow
sleep 1s

for ((i=1;i<=$wcl;i++))
do

var1=$(sed -n $i"p" $file|awk -F":" ‘{print $1}’)
var2=$(sed -n $i"p" $file|awk -F":" ‘{print $2}’)
sshadow[$var1]=$var2
echo "sshadow[$var1]=$var2″
#sleep 1s

done

sleep 1s
echo ${sshadow[liszt]}

發表於 linux | 發表迴響

linux shell – 陣列帶入

使用 $() 或 " 結果帶入陣列
例:var1=($(df / | tail -n +2))

關聯數組
delclare -A var1
man=([name]=jessic [age]=25 [addr]=taipei)

列出陣列全部內容
echo ${man[*]}

刪除內容
unset ${man[age]}

刪除陣列
user man

發表於 linux, 未分類 | 已標籤 | 發表迴響

修正 centos 7 yum update libgpod error

更新時出現 libgpod-0.8.3-14.el7.x86_64 (EPEL) error
#應該是 EPEL 更新包問題
降級 在 更新
yum downgrade libgpod 即可
————————————-但事情還沒完
依樣繼續出現

https://blog.csdn.net/cjy317/article/details/105245668

下載這4個
rpm-4.11.3
python-urlgrabber
yum-3.4.3
yum-metadata-parser
yum-rhn-plugin

強制安裝
rpm -ivh * –nodeps –force

yum clean all
yum update -y
完工

發表於 linux, 未分類 | 發表迴響

刪除windows 同步中心

1.regedit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Syncmgr\Handlers\
底下 子資料夾刪除

發表於 未分類 | 已標籤 | 發表迴響

Synology NAS OpenVPN Route

Synology NAS OpenVPN Route 亂談
這裡不談到底 VPN 該建在 Router 端 or NAS 端, 這各有不同的考量, 不少網友詢問 client 連線 NAS 上的 OpenVPN Server, 但無法存取到內網上的其他網路資源, 其實這就是路由的問題.
OpenVPN 的 route 可以透過好幾種方式去佈建, 可以是 push or pull. 就如附圖上面的這個設定 "允許用戶端存取伺服器的區域網路“, 它到底在做了什麼?
其實它就是 push route 給 client. 當 VPN tunnel 建立起來後, client 必須加入那些路由設定.
在 NAS VPN server 端 config file,
/usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf 它加了一筆 (註. NAS 內網網段為 192.168.10.0/24)
push "route 192.168.10.0 255.255.255.0″

原理就是這麼簡單,
另一種是 OpenVPN client 去設定 default gateway 都往 VPN tunnel 走.
# If redirect-gateway is enabled, the client will redirect it’s
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)
# redirect-gateway def1
是不是都很容易

發表於 Network, 未分類 | 發表迴響

dos For

http://bigpxuan.blogspot.com/2016/08/dos-for.html

FOR %%a IN (xxx,yyy,zzz) DO (
echo %%a
)

out:
xxx

yyy

zzzz

%%a — 用來儲存For迴圈產出的值,前面一定要有兩個%%後面加上一個英文字。注意 : 這個英文字有大小寫之分
IN — 指令文字,後面一定要接 ()
(xxx,yyy) — 文字串,在 For 裡面依序使用的東西 (後面會說到裡面還可以放檔案、指令)
DO — 指令文字, 後面一定要接 (echo ….)
(echo ….) — 要執行的指令,在這裡可以使用For的變數 %%a。
如果指令有兩個以上可以像例子中一樣用 ( ) 包起來。

數字的遞增和遞減

For /L %%a in (start,step,stop) DO ( Do something)

例子:
For /L %%a in (1,2,7) DO (
echo %%a
)

/L — For後面可以下不同的參數,這會改變For對 IN 後面的 ( ) 所做的動作。
/L 會讓For 認定 ( ) 內的是數字,並且是遞增或遞減
start — 起始數字,For迴圈從這個數字開始
step — 每次迴圈變化的量,1 就是一次加一,-1就是一次減一。
例子中是每次加二
stop — 當數字超過stop所設定的數字的時候迴圈就會終止。
(超過可能是比它大或比它小,端看start的數字與stop的數字的比較)
當數字等於stop的時候,並不會停止迴圈。

搜索檔案用的迴圈

For /R [[drive:]path] %%a in (檔名,檔名) do (Do something)

例子
For /R c:\users\myaccount\Desktop %%a in (生日*,會議*) do (
echo %%a
)

/R — 設定為搜索檔案的For迴圈
drive: — 搜索的磁碟機位置,如C:\或D:\等
可以省略不輸入,當沒有輸入時會認定為執行目錄的磁碟機,一般是 C:\
path — 開始搜索的資料夾,重這個資料夾開始往子資料夾搜索
可以省略不輸入,當drive和path都沒有輸入時,會使用執行目錄為預設路徑
(檔名,檔名…) — 輸入要尋找的檔名,其中檔名要加上 * 號
* 號代表萬用字元,例子中,生日*,"生日"後面不管接什麼名字都算符合
也可以放在前面,*生日.doc,也就變成檔名最後是生日的都算符合

指令或讀取檔案的For迴圈

For /F "option" %%a in (檔案,檔案…) do (Do something)
For /F "option" %%a in ("字串,字串") do (Do something)
For /F "option" %%a in (‘指令’) do (Do something)

稍微說明一下,in後面 ( )中 :
不加任何符號 (除了 , )代表這是一個檔案,可以被開啟讀取
前後加上 " " ,表示裡面是字串
前後加上 ‘ ‘ ,表示裡面是個指令,For會執行這個指令並收集回傳值

如果檔案的檔名有空白會造成For迴圈的判讀錯誤,因為Dos的For 會把空白當作分行,空白前後是不同檔案,這個時候option要加上 "usebackq",此時For迴圈的判讀為

For /F "usebackq" %%a in ("檔案,檔案…") do (Do something)
For /F "usebackq" %%a in (‘字串,字串’) do (Do something)
For /F "usebackq" %%a in (`指令`) do (Do something)

( )內用 " ",代表檔案,這樣可以把有空白檔名的檔案包在裡面
‘ ‘, ‘ = " + shift, "符號再按shift就是這個符號,這個符號會被判定為字串
` `, 最左上角的按鈕 ( 1 的左邊),這個符號會被判定為指令

例子:
For /F "tokens=4,5″ %%A in (‘dir’) do (
echo 檔名:%%B 檔案大小:%%A
)

其中option有很多選項,整個option要用 " " 包起來,如 "tokens=1,2 eol=+ skip=2″

eol — 當碰到設定的符號時,就不會再儲存後面的文字 (只能指定一個字元)

skip — 略過開頭的 n 行,設定幾行就會跳過幾行

delims — 設定分隔符號,預設的分隔符號為 空白 ,可以指定多個符號
如"delims=+=:a ",指定的符號有 +號 =號 :號 a英文字和一個空白

tokens — 當回傳的文字被分隔符號 (delims)切隔成多個時,就要用tokens來取得想要的文字
預設是 1 ,可以用"tokens=1,3,5-9,*",可以一次指定一個或用 – 符號指定多個
也可以用 * 符號把從這個以後的文字都設定在同一個變數中。
(tokens的使用會在下面介紹)

usebackq 改變 /F 讀取的格式

這邊說明一下tokens
tokens的使用會引用額外的變數,如 :
For /F "tokens=1,2,3 %%d in (aaa bbb ccc ddd) do (
echo %%d
echo %%e
echo %%f
echo %%g
)

會顯示
aaa
bbb
ccc
%g

一旦指定tokens以後,For迴圈會自動增加變數,並依照英文符號第增
如果指定的變數是大寫,如%%C,自動增加的變數也會是大寫%%D、%%E…
最後一個會顯示 %g 是因為沒有指定token,所以第四個變數沒有文字可以儲存

如果tokens使用 m-n的方式,如:
For /F "tokens=1,2-3,4 %%D in (aaa bbb ccc ddd) do (
echo %%D
echo %%E
echo %%F
echo %%G
)

會顯示
aaa
bbb ccc
ddd
%G

最後一種tokens的用法是tokens=1,*,星號代表從這個 (在這邊是1) 以後的文字都存在同一個變數,如 :

For /F "tokens=1,2,* %%D in (aaa bbb ccc ddd) do (
echo %%D
echo %%E
echo %%F
echo %%G
)

會顯示
aaa
bbb
ccc ddd
%G

這裡做簡單的小結
For 後面代不同的參數會使For有不同的運作和判斷
For —— 最基本的For迴圈,筆者還沒用過
For /L — 讓數字遞增或遞減的For迴圈,像是讓一個指令重複執行10次
For /R — 搜索檔案,可以搜索特定檔案或全部搜索,並回傳各種檔案的屬性
For /F — 讀取檔案或執行指令,並儲存回傳的值 (常用),並且有很多個option可用
For /D — 使用延伸指令,重來沒用過

底下介紹筆者在用的使用方法

讀取電腦的IP
各位應該有很多種抓取電腦IP的方法,這邊用For迴圈加ipconfig指令的方式
@setlocal
@echo off
for /F "tokens=16″ %%a in (‘ipconfig ^| findstr /R /C:"10.1.1″ ^| findstr /R /C:"IPv4″‘) do (
set ip=%%a
)
echo %ip%
endlocal

輸出:
10.1.1.20

更進一步的,只要10.1.1.20裡面的最後一個數字 20 ,可以在迴圈裡面再新增一個迴圈
@setlocal
@echo off
for /F "tokens=16″ %%a in (‘ipconfig ^| findstr /R /C:"10.1.1″ ^| findstr /R /C:"IPv4″‘) do (
for /F "tokens=4 delims=." %%c in ("%%a") do (set ip=%%c)
)
echo %ip%
endlocal
輸出:
20

說明一下這邊用到的參數和指令
tokens=16 — 可能有人會問,為什麼知道是第16個位置,那是因為我用試的試出來的
方法有點像 : tokens=1,2,3,4,5,6,7,8,9,10,11,12,然後用echo %%a-1, %%b-2,….
這樣的方法找出位置
delims=. —- 因為IP之間是用 . 隔開,因此設定間隔符號為 . 。
ipconfig — 顯示電腦IP和其它相關資訊
findstr —- 在文件中尋找文字,在這邊用來尋找 ipconfig 執行的結果
^| ——— 這裡有兩個符號 ^ 和 | 。
^ 在批次檔內代表逃脫符號,會讓下一個符號的特殊能力失效,變成普通的文字。
| 這個是管線符號 (pipe) 會把左邊執行的結果傳到右邊當作輸入
會用到 ^| ,是因為For裡面會認定 | 為特殊符號,會中斷For的執行

這邊用到兩個迴圈,For裡面還有另一個For,這可以降低撰寫的行數
兩個For所使用的變數建議用不一樣的,比較好區分

For裡面設定(set)變數
這邊用漸進的方式解釋變數在For迴圈理的現象
這邊使用For /R 去累計總檔案的大小,例子中的檔案大小是編出來的

@setlocal
echo off
set size=0
For /R %%A in (Joo*) do (
echo %%~zA
)
pause
endlocal
輸出:
10
20
30
>40

現在加上一個變數來累加總共的檔案大小
@setlocal
echo off
set size=0
For /R %%A in (Joo*) do (
set /a size=%size% + %%~zA
echo 這個檔案大小 : %%a
echo 目前累計 : %size%
)
echo 總共累計 : %size%
pause
endlocal
輸出:
這個檔案大小 : 10
目前累計 : 0
這個檔案大小 : 20
目前累計 : 0
這個檔案大小 : 30
目前累計 : 0
這個檔案大小 : 40
目前累計 : 0
總共累計 : 40

這個例子多了set /a size=%size% + %%~zA用來累加每個檔案的大小
並在下一行使用echo %size%告知現在size的累計量

從結果看,在迴圈內的 size 變數沒有被加總的感覺
最後一個檔案大小是 40 ,跟"總共累計"大小一樣,也就是 size變數只有加到最後一次
因為在 For 裡面的 % % 變數,是取用For之前的變數做的位置
因此每次執行set /a size=%size% + %%~zA這個裡面的%size%,是取用最前面set size=0 的這個位置
也就是在For裡面呼叫%size%時,每次呼叫的值都是 0。
底下說明如何在For迴圈裡面使用 set 變數。

新增參數 enableextensions enabledelayedexpansion

@setlocal enableextensions enabledelayedexpansion
echo off
set size=0
For /R %%A in (Joo*) do (
set /a size=!size! + %%~zA
echo 這個檔案大小 : %%a
echo 目前累計 : !size!
)
echo 總共累計 : %size%
pause
endlocal
輸出:
這個檔案大小 : 10
目前累計 : 10
這個檔案大小 : 20
目前累計 : 30
這個檔案大小 : 30
目前累計 : 60
這個檔案大小 : 40
目前累計 : 100
總共累計 : 100

在 setlocal 後面再加上參數enableextensions enabledelayedexpansion,可以使用 ! ! 呼叫變數
在For裡面呼叫 %size%會一直是零,原因上面有提到,為了要反應迴圈內的變數要使用 !size! 去呼叫變數。
這樣的呼叫方式第一次會取set size=0的值存在另一個位置
而後在迴圈內每次呼叫!size!都會使用這個新的位置進行儲存和讀取

結論就是:
要在回圈中使用變數要增加參數enableextensions enabledelayedexpansion
迴圈中呼叫變數的方法為 !變數!
迴圈外呼叫變數的方法還是 %變數%

最後展示某個資料夾即子資料夾的檔案,超過修改時間7天後會被刪除

@setlocal enableextensions enabledelayedexpansion
echo off
set size=0

For /R T:\abc\def\ %%A in (*) do (
rem 把檔案的日期存到變數tmp
set tmp=%%~tA

For /F "tokens=1,2,3 delims=/ " %%c in ("%%~tA") do (
rem 檢查檔案日期的年份,如果比現在的年份小就刪除
if %date:~0,4% GTR %%c (
del /f /q "%%A"
echo %%A
set /a size=!size! + %%~zA
) else (
rem 檢查檔案日期的月份,如果比現在的月份小就刪除
if %date:~5,2% GTR %%d (
del /f /q "%%A"
echo %%A
set /a size=!size! + %%~zA
) else (
set tmp_2=%%e
rem 因為DOS變數的關係,要檢查日期是不是兩位數並做一些處理
if "!tmp_2:~0,1!" == "0″ (
set /a tmp_2=!tmp_2:~1,1! + 6
if "!tmp_2:~0,1!" == "0″ (set tmp_2=0!tmp_2! )
) else (
set /a tmp_2=!tmp_2:~0,2! + 6
)
rem 檢查檔案月份的天數,如果比現在的天數小7天就刪除
if %date:~8,2% GTR tmp_2 (
del /f /q "%%A"
echo %%A
set /a size=!size! + %%~zA
)))
)

)
echo 總刪除的檔案大小 : %size%
pause
endlocal
怕有人使用後誤刪檔案,這個例子中的路徑是亂設定的。
例子內並沒有真的準確7天,在年和月的部分有可能差不到7天
可以用類似( set /a xx=30-%date:~8,2%+6) & if xx GTR 7 )的方式比較月的部分有沒有超過7天

發表於 dos | 發表迴響

dos set

set /a : 在set後面加上 /a ,就可以進行運算相對應的符號有 + 加號,- 減號, / 除號, * 乘號 , %% 為除完後的餘數
set /p : 讓使用者自行填入變數
ex: set /p x=請填入生日: echo %x%
SET擴充的功能
整個變數要用 %% (或! !) 包起來
: ——— : 號是分隔線,在這之後就是取代的搜索和取代文字
find —— 變數內要備取代的文字
replace — 當被find找到的文字會被replace所設定的文字取代

取得子字串
可以把變數的文字切一小塊出來
ex:
%變數:~A,B%
set x=Don`t Do that
echo %x:~3,6%
輸出:
`t Do

在For或If內使用set /a,最好是把運算的部分用 "" 包起來
因為set後面的 ) 符號會影響IF的 ( 符號
ex:
If x = x (
set /a "x=3*(2+2)"
)

實用的內建變數
批次檔
大部分使用Dos指令都是使用批次檔,當執行批次檔時會有內建的變數

%~X — X是0到9,0代表這個批次檔,1到9是後面加的參數

echo %~0 //可能會是 c:\test_dir\test.bat,端看批次檔的位置
test.bat aaa.txt

echo 批次檔 : %~0,第一個參數 : %~1
輸出 : 批次檔 : c:\test_dir\test.bat,第一個參數 : c:\test_dir\aaa.txt

其中這個%~X功能前面可以增加參數
%~X – 顯示參數 X 檔案的完整路徑+檔名+副檔名
%~fX – 功能同上
%~dX – 顯示參數 X 檔案的磁碟機代號
%~pX – 顯示參數 X 檔案的路徑
%~nX – 顯示參數 X 檔案的檔名
%~xX – 顯示參數 X 檔案的副檔名
%~sX – 功能類似%~fX,但檔名是短檔名
%~aX – 顯示參數 X 檔案的檔案屬性
%~tX – 顯示參數 X 檔案的日期/時間
%~zX – 顯示參數 X 檔案的檔案大小

這些參數可以複合使用,如
%~dp0 顯示批此檔的完整路徑,但不包含檔名(常用)
%~nx0 顯示批次檔的檔名+副檔名

環境變數
%date% 顯示日期,星期的部分會依照windows設定的語言而改變
%time% 顯示時間,上下午的部分會依照windows設定的語言而改變
%CD% 顯示執行目錄,
%CMDCMDLINE% 執行這個檔案的原執行程式,一般是CMD.exe
%RANDOM% 0到32767之間的亂數

發表於 dos | 發表迴響

Hinet Wifi 設定

中華電信 HiNet 光世代全屋通 Wi-Fi 5_4T4R

https://iqmore.tw/cht-hinet-wi-fi-5-4t4r-arcadyan-we410443-tc-review?fbclid=IwAR1EOJsxsmpT-lnbgdzaGLwY7BpyoHpwmKflBAWyixI3-JzihOTIycBd-YU

https://www.ptt.cc/bbs/Broad_Band/M.1656086917.A.A3A.html?fbclid=IwAR0EJ_HlClVjPtD2No0o2qL2lwkKHVaQpwInqPCkG8epSD4J5fM6XjfdjZo

發表於 Hinet, Network | 發表迴響

Block location List

https://www.ip2location.com/free/visitor-blocker

發表於 未分類 | 發表迴響