2021年1月7日 星期四

Bash 執行 for 1~100 的寫法 (轉貼)

 

Bash 執行 for 1~100 的寫法

最開始只是要對程式跑100次, 做個時間測試而已, 例如下述:

  1. for i in {1..100};
  2. do
  3. time curl -o /dev/null https://blog.longwin.com.tw;
  4. done
  5. # 跑100次, 印出時間

後來想要將變數代入後, 發現一連串的事情.

註: {1..100}, 使用 {1..$END} 無法執行. (需搭配 seq 或者 for 換寫法)

下述就不解釋了~ 直接看程式和結果即可.

  1. for i in {1..5};
  2. do
  3. echo $i;
  4. done
  5. # 印出 1 2 3 4 5 (換行)

要將 {1..5} 的 5 用變數帶入, 就會需要搭配 seq
seq 1 5 # 印出 1 2 3 4 5

  1. END=5
  2. for i in $(seq 1 $END);
  3. do
  4. echo $i;
  5. done
  6. # 印出 1 2 3 4 5 (換行)
  1. # 或者 for 寫法換掉
  2. BEGIN=1
  3. END=5
  4. for ((i=$BEGIN; i<=$END; i++))
  5. do
  6. echo -n "$i "
  7. done
  8. # 用空隔分隔, 印出 1 2 3 4 5
  1. for i in {0..10..2}
  2. do
  3. echo $i
  4. done
  5. # 印出 0 2 4 6 8 10 (換行)
  1. for i in $(seq 1 2 10);
  2. do
  3. echo $i;
  4. done
  5. # 印出 1 3 5 7 9 (換行)

2021年1月6日 星期三

Linux shell script 2>&1 ??? (轉貼)

 當我初次接觸shell script時,看別人寫的script或者範例時, 2>&1這類型的符號真困擾我.

找到了一篇文章,和各位分享 原文 http://bowen.blog.51cto.com/136148/94406

0 代表鍵盤輸入
1 代表螢幕輸出
2 代表錯誤輸出

Ref:

$ cat nop.txt > output.txt
cat: nop.txt: No such file or directory

Even if we redirect the stdout to a file, we still see the error output in the screen, because we are redirecting just the standard output, not the standard error.

Grave accent (`) symbol (轉貼)

 When I type Grave accent(`) symbol in terminal, It is like down below.

>
>
>

What does Grave accent(`) symbol do?

3

The '>' is displayed because the shell 'waits' for the closing quote. From the man page:

Command Substitution
       Command substitution allows the output of a command to replace the com-
       mand name.  There are two forms:
          $(command)
   or
          `command`

Android fastboot 基本用法教學(轉貼)

 

Android fastboot 基本用法教學

本篇介紹如何在 Android 下使用 fastboot 指令,fastboot 是開發 Android 時常用到的工具,使用 fastboot 指令可對 android 裝置進行燒錄,以下將介紹如何安裝與基本使用。

Google 官方的 SDK Platform Tools release notes 有各版本的釋出說明。

Windows 安裝方式

從官方下載 Windows 最新版
目前最新版為 platform-tools_r30.0.5-windows.zip

Mac 安裝方式

從官方下載 Mac 最新版
目前最新版為 platform-tools_r30.0.5-darwin.zip

Ubuntu 安裝方式

從官方下載 Linux 最新版
目前最新版為 platform-tools_r30.0.5-linux.zip

透過 apt 安裝

1
2
$ sudo apt update
$ sudo apt install android-tools-fastboot

fastboot 指令基本教學,進入 fastboot mode 工程模式

Android 裝置進入 fastboot mode 模式有兩種方式,
方法1,如果 Android 已經是開機完的狀態,可以使用下列 adb 指令讓 Android 裝置進入到 fastboot mode 模式,

1
$ adb reboot bootloader

方法2,如果 Android 是關機狀態,可以使用 Android 裝置上的按鈕鍵讓 Android 開機時進入 fastboot mode 模式,每支 Android 手機對應的按法不太一樣,請參考這裡,大部分都是開機時長按電源鍵(Power)與音量下鍵(Volume Down)。

解除退出離開 fastboot mode 工程模式

Android 裝置在 fastboot mode 模式時,如果我們想要離開/退出/解除 fastboot mode 模式的話,可以輸入下列 fastboot 指令,就會退出fastboot mode 模式讓 Android 裝置重新開機回到作業系統,

1
$ fastboot reboot

fastboot 指令選項

以下為常用的 fastboot 指令,有想到在陸續增加吧!
sudo fastboot devices︰查看裝置
sudo fastboot reboot︰重新開機
sudo fastboot reboot-bootloader︰重新開機且進入 bootloader
sudo fastboot flash boot boot.img︰燒錄 kernel 區
sudo fastboot flash system system.img︰燒錄系統區
sudo fastboot flash vendor vendor.img︰燒錄
sudo fastboot flash persist persist.img︰燒錄
sudo fastboot flash userdata userdata.img︰燒錄使用者資料區,包含一些安裝的軟體
sudo fastboot oem device-info︰查詢裝置的基本資訊
sudo fastboot oem [COMMAND...]︰執行 oem 的特定指令
sudo fastboot oem unlock︰新的 android 裝置需要用sudo fastboot flashing unlock指令。解鎖 bootloader 開機載入器、解除鎖定後才能刷 boot.img,可能會失去保固與手機資料,包含照片、影片、文件、app,請記得備份
sudo fastboot getvar <變數名>︰查詢裝置 bootloader 的某個變數
sudo fastboot getvar all︰查詢裝置 bootloader 的所有變數
sudo fastboot set_active <a/b>︰切換 a/b 槽
sudo fastboot help︰查看說明

小技巧:使用 fastboot boot boot.img 下載 boot.img 載入 kernel 到記憶體開機試用,不會真的燒錄進去,這樣可以測試看看這個 boot.img 是否能正常開機,如果無法正常開機只要重新開機就什麼復原了。指令下完後,它 download 完 boot.img 會接著開機,不需再下額外的指令。

參考
[1] 刷機小教室-簡易 fastboot 教學-開發者交流區
https://www.asus.com/zentalk/tw/thread-215625-1-1.html
[2] Android Fastboot 与 Recovery 和刷机 - 简书
https://www.jianshu.com/p/d960a6f517d8
有系統分區示意圖

Android fastboot 查詢當前使用的a/b槽可以看這篇
上一篇是Android adb指令的安裝與用法教學,有空看看吧~

Shell脚本中的while getopts用法小结 (轉貼)

Shell脚本中的while getopts用法小结

 

命令格式:

1
getopts optstring name [arg...]

命令描述:
optstring列出了对应的Shell Script可以识别的所有参数。比如:如果 Shell Script可以识别-a,-f以及-s参数,则optstring就是afs;如果对应的参数后面还跟随一个值,则在相应的optstring后面加冒号。比如,a:fs 表示a参数后面会有一个值出现,-a value的形式。另外,getopts执行匹配到a的时候,会把value存放在一个叫OPTARG的Shell Variable当中如果 optstring是以冒号开头的,命令行当中出现了optstring当中没有的参数将不会提示错误信息

name表示的是参数的名称,每次执行getopts,会从命令行当中获取下一个参数,然后存放到name当中。如果获取到的参数不在optstring当中列出,则name的值被设置为?。命令行当中的所有参数都有一个index,第一个参数从1开始,依次类推。 另外有一个名为OPTIND的Shell Variable存放下一个要处理的参数的index。