---
# System prepended metadata

title: 蔣駿杰

---

## 蔣駿杰  linux的作業


## Ubuntu

什麼是Ubuntu
簡單來說Ubuntu是一個GNU／Linux作業系統，就像你我平常在使用的微軟公司的Windows作業系統或Apple公司的Mac OS一樣，而這個作業系統也有用在伺服器系統上。那麼GNU與
Linux到底是什麼；GNU是一個計劃，主要是開發一套與Unix(一套作業系統)向上兼容的名為「GNU」(GNU's Not Unix)的完全自由的軟體系統，而前述中的"自由"這個單詞並不是指價格，而是可以自由的使用。您可以為得到GNU軟體付費，也可以不付。無論如何，一旦得到了軟體，您便擁有了使用它的三項指定的自由：
1.複製軟體並將其送給您的朋友和同事的自由。
2.通過對源碼的完全控制而可以隨意改變程序的自由。
3.發布改進的版本從而幫助建設社群的自由。(如果您再發布GNU軟體，您可以為傳遞拷貝過程中的物理行為收取一定的費用，您也可以贈送拷貝。)
![image](https://hackmd.io/_uploads/rk_-ASP_0.png)

 ## 權限類型
 
 在 Linux 系統中，chmod、chown 和 ls -l 是三個非常常見且重要的命令，它們分別用來管理文件和目錄的權限、擁有者和查看文件的詳細信息。讓我們逐一介紹這些命令：

1. chmod — 改變文件的權限
例子
```

給所有者添加執行權限：

chmod u+x file.txt
去除群組的寫入權限：

chmod g-w file.txt
設置所有人具有讀取權限：

chmod a=r file.txt
```
2. chown — 改變文件的擁有者和群組
chown 用來改變文件或目錄的擁有者（user）和群組（group）。這對於管理多用戶系統中的文件和目錄非常重要。

例子
```
將文件的擁有者設為 alice，群組設為 staff：

chown alice:staff file.txt
將文件的擁有者設為 alice，不改變群組：

chown alice file.txt
將文件的群組設為 staff，不改變擁有者：

chown :staff file.txt
```
3. ls -l — 查看文件詳細信息
ls -l 是用來查看文件或目錄的詳細信息的命令。它會列出文件的權限、擁有者、群組、大小、修改時間等信息。

例子：
```

ls -l file.txt
輸出解釋：
diff

-rwxr-xr-- 1 alice staff 1234 Jan 29 12:34 file.txt
```

##  Linux 中的權限分為三種基本類型：

讀取 (r)：允許查看文件內容或列出目錄內容。
寫入 (w)：允許修改文件內容或添加、刪除目錄中的檔案。
執行 (x)：允許執行文件（如果是程式）或進入並操作目錄。
2. 權限等級
Linux 系統中的權限是基於三個不同的權限等級設定的：

所有者 (Owner)：文件或目錄的擁有者（通常是創建文件的用戶）。
群組 (Group)：文件或目錄所屬的用戶組。該群組內的所有用戶共享對該文件的權限。
其他人 (Others)：指非所有者且不屬於該文件群組的所有其他用戶。
這些權限會以 rwx 的形式顯示，分別表示「讀取」、「寫入」和「執行」。例如：

rwxr-xr--：
第一部分 rwx 是 所有者 的權限。
第二部分 r-x 是 群組 的權限。
第三部分 r-- 是 其他人 的權限。

權限的顯示格式
當你使用 ls -l 命令列出文件或目錄時，會看到類似以下的權限顯示：
```
bash

-rwxr-xr-- 1 owner group 1234 Jan 29 12:34 myfile
```
這裡的第一欄顯示文件的權限：

第一個字母 (- 或 d) 表示文件類型：
- 表示普通文件
d 表示目錄
接下來的三個字母 表示所有者的權限（rwx）。
接下來的三個字母 表示群組的權限（r-x）。
最後的三個字母 表示其他人的權限（r--）。
4. 權限數值表示法
Linux 也允許使用數字來表示文件權限，這是通過將每個權限類型對應的數值相加來實現的：

讀取權限 (r) = 4
寫入權限 (w) = 2
執行權限 (x) = 1
每個權限等級的數字會被加總：

所有者權限的數字（Owner）
群組權限的數字（Group）
其他人權限的數字（Others）
例如，rwxr-xr-- 可以轉換為：

所有者：rwx = 4 + 2 + 1 = 7
群組：r-x = 4 + 0 + 1 = 5
其他人：r-- = 4 + 0 + 0 = 4
因此，權限 rwxr-xr-- 就是數值 754。

5. 改變權限
你可以使用 chmod 命令來修改文件或目錄的權限。chmod 允許使用符號模式或數字模式來設置權限。

使用符號模式
```
bash

chmod u+x file.txt    # 給所有者 (user) 增加執行權限
chmod g-w file.txt    # 去除群組 (group) 的寫入權限
chmod o=r file.txt    # 設定其他人 (others) 只有讀取權限
```
使用數字模式
```
bash

chmod 755 file.txt    # 設定所有者擁有 rwx 權限，群組和其他人擁有 rx 權限
chmod 644 file.txt    # 設定所有者擁有 rw 權限，群組和其他人擁有 r 權限
```
6. 改變擁有者和群組
你也可以使用 chown 命令來更改文件的所有者和群組：
```
bash

chown owner:group file.txt    # 設定文件的所有者和群組
chown owner file.txt          # 只改變所有者
chown :group file.txt         # 只改變群組
```
在 Linux 和類 Unix 系統中，sudo 是一個非常常用的命令，它讓普通用戶能夠以管理員（root 用戶）身份執行命令，從而獲得更高的權限。除了 sudo，還有許多其他相關命令和概念，這些都是用來管理系統的不同層面。讓我們詳細了解一下 sudo 以及其他常見命令和解釋。

## 1. sudo — 以超級用戶身份執行命令
sudo 代表 "superuser do"（超級用戶執行）。它使得普通用戶能夠執行通常需要根（root）權限的命令，而無需直接登錄為 root 用戶

## 2. root 用戶與 sudo 的關係
root 用戶：是 Linux 系統中的超級用戶，擁有對系統的所有權限，可以執行任何操作。直接使用 root 用戶執行命令會讓你獲得最高級別的控制權限。
sudo：不需要直接登錄為 root 用戶，而是通過 sudo 提升當前用戶的權限來執行需要高權限的操作。這樣做的好處是可以限制 root 權限的濫用，並且每次使用 sudo 都會有審計記錄。
```
sudo：用來以 root 或其他用戶的身份執行命令，避免直接登錄為 root，用戶需要輸入當前用戶的密碼。
su：用來切換到指定用戶（通常是 root）並執行命令，切換後需要提供目標用戶的密碼。
chmod：用來修改文件或目錄的權限，讓用戶控制誰可以讀、寫或執行文件。
chown：用來修改文件的擁有者和群組。
ls：用來列出目錄中的文件和子目錄，並可以顯示詳細的文件信息。
ps：用來查看當前系統中運行的進程。
```

## 第一題
搜尋python3開頭
```bash
$ apt-cache search python | grep '^python3'
```


## 第二題
顯示時間 過濾出包含 `datetime` 的行 使用 `cut` 命令，以 `T` 為分隔符，提取第二部分，時間時區信息 
再次使用 `cut` 命令，以 `+` 分隔符，提取時間部分，去掉時區信息
最后使用 `cut` 命令，以 `.` 為分隔符，去掉毫秒部分，僅保留 `HH:MM:SS`。
`watch` 命令每隔 5 秒運行一次指定的命令
```bash
curl -s http://worldtimeapi.org/api/timezone/Asia/Taipei.txt | grep '^datetime:' | awk -F'T' '{print $2}' | cut -d'.' -f1

watch -n 5 'curl -s http://worldtimeapi.org/api/timezone/Asia/Taipei.txt | grep datetime | cut -d "T" -f 2 | cut -d "+" -f 1 | cut -d "." -f 1'

擷取 24-31僅保留 `HH:MM:SS` [watch] 是一個可以定期執行指令 -n 1 每隔0.1秒間看
echo $(curl -s http://worldtimeapi.org/api/timezone/Asia/Taipei | cut -d, -f 3|cut -c 24-31 )
watch -n 1 "curl -s http://worldtimeapi.org/api/timezone/Asia/Taipei | cut -d, -f 3|cut -c 24-31"


```


## 第三題

將台積電股票資訊爬下來
網址: https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2330.tw&json=1&delay=0&_=1635167108897

回傳的JSON欄位說明：

欄位名稱	描述
z	當前盤中成交價
tv	當前盤中盤成交量
v	累積成交量
b	揭示買價(從高到低，以_分隔資料)
g	揭示買量(配合b，以_分隔資料)
a	揭示賣價(從低到高，以_分隔資料)
f	揭示賣量(配合a，以_分隔資料)
o	開盤價格
h	最高價格
l	最低價格
y	昨日收盤價格
u	漲停價
w	跌停價
tlong	資料更新時間（單位：毫秒）
d	最近交易日期（YYYYMMDD）
t	最近成交時刻（HH:MI:SS）
c	股票代號
n	公司簡稱
nf	公司全名
注意
爬下來的資料請透過管線給jq指令做格式化，比較容易拆解資料。

請抓取nf欄位和z欄位資訊，然後組成結果如下:

台灣積體電路製造股份有限公司 今日價格: 838


```
使用 `jq` 處理 JSON 數據，並使用 `-r` 來輸出原始字符串
使用 `jq` 的字符串插值功能，提取 `nf`（公司全名）和 `o`（開盤價）字段，並格式化輸出。
JSON 中提取 `msgArray` 數组中的每個元素
```bash
```
![螢幕擷取畫面 2024-05-31 132914](https://hackmd.io/_uploads/ryV5NSrHA.png)

curl -s 'https://mis.twse.com.tw/stock/api/get StockInfo.jsp?ex_ch=tse_2330.tw&json=1&delay=0&_=1635167108897' | jq -r '.msgArray[] | "\(.nf) 今日價格: \(.o)"'


## 第四題

取得目前目錄下全部的子目錄和檔案佔據的硬碟空間，並以下面的格式顯示

此目錄檔案總大小為: 185M
提示:
可以使用du指令計算

dh檔案顯示 h資料大小   tail -1` 從du -h` 的輸出中提取最後一行 cut -f 1獲取tail -1提取的最後一列 $執行括號中的命令 echo印出
```bash
echo "此目錄檔案總大小為: $(du -h | tail -1 | cut -f 1)"
```
![image](https://hackmd.io/_uploads/ByNaSkG8R.png)

## 第五題
###### get_google_trend.sh

```
從google trends抓取熱門搜尋排行榜資料，並以下面格式輸出到畫面上:

林雅各:1000+
趙天麟:1000+
魔獸:1000+
黃仁勳:5萬+
MBTI:5萬+
內田有紀:1萬+
Popeyes:1萬+
台灣野馬隊:5000+
李西河:5000+
李海魯肉飯:5000+
炎亞綸:2000+
廣達:2000+
長庚大學:2000+
張學友:2000+
東海大學:2000+
中興大學:2000+
雷驤:2000+
T1:2000+
東吳大學:2000+
TAT:2000+
噩盡島:2000+
MSCI 調整:1000+
今永昇太:1000+
Google Trends資料抓取curl指令

```
![LINE_ALBUM_程式紀錄_240611_3](https://hackmd.io/_uploads/BkssZrHrR.jpg)


![427989733_3367719686705131_3926148466420266097_n](https://hackmd.io/_uploads/ByWXfHBrR.jpg)


![image](https://hackmd.io/_uploads/H1T8MJfUC.png)



我想說明
```bash
curl -s 'https://trends.google.com/trends/api/dailytrends?hl=zh-TW&tz=-480&geo=TW&hl=zh-TW&ns=15'   -H 'accept: application/json, text/plain, */*'   -H 'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7'   -H 'cookie: __utmc=10102256; __utma=10102256.1988690101.1717122572.1717122582.1717124682.2; __utmz=10102256.1717124682.2.2.utmcsr=trends.google.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmt=1; __utmb=10102256.2.9.1717124699155; SEARCH_SAMESITE=CgQIm5sB; AEC=AQTF6HxX-R9ngeztx-zrIwJTfvmFSLN9rTvkfN4O25Q1PskDRAc6PYsKfSk; NID=514=i4H9axvH-OMMwM0VPNqAgrbQxLw9PtToEHwpe9CaoQ_cgNip9k7bhLdpcu1r9SH4xvndMse2zw8OQT63tTwF-CfJLzYUT559XM5FUoTKHbZ8H0VCaudYzYO6ywwUkmUcvvmAGZXKQFV3dWgjGT3Ns8TWjT7OnGIWOsWnyKUFhnzLbWY4e9Ixb4pG2ZvPV8Kq_IjWQAHc1Qro_u6SETkX6hNfUNd8EqBQG47voaopVYFgRc8jlWqPVyVEbpaFEeRXCwgJtisy5ok8-gdUs7sX4sOaFE9sfsr7sSZUMU2Lw3-7pvA1VFA8ZvOuXpge; _gid=GA1.3.377492726.1717122573; 1P_JAR=2024-05-31-03; OTZ=7580345_24_24__24_; _ga=GA1.3.1988690101.1717122572; _ga_VWZPXDNJJB=GS1.1.1717122571.1.1.1717124894.0.0.0'   -H 'priority: u=1, i'   -H 'referer: https://trends.google.com/trends/trendingsearches/daily?geo=TW&hl=zh-TW'   -H 'sec-ch-ua: "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"'   -H 'sec-ch-ua-arch: "x86"'   -H 'sec-ch-ua-bitness: "64"'   -H 'sec-ch-ua-full-version: "125.0.6422.113"'   -H 'sec-ch-ua-full-version-list: "Google Chrome";v="125.0.6422.113", "Chromium";v="125.0.6422.113", "Not.A/Brand";v="24.0.0.0"'   -H 'sec-ch-ua-mobile: ?0'   -H 'sec-ch-ua-model: ""'   -H 'sec-ch-ua-platform: "Windows"'   -H 'sec-ch-ua-platform-version: "10.0.0"'   -H 'sec-ch-ua-wow64: ?0'   -H 'sec-fetch-dest: empty'   -H 'sec-fetch-mode: cors'   -H 'sec-fetch-site: same-origin'   -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'   -H 'x-client-data: CIS2yQEIorbJAQipncoBCPbuygEIlqHLAQiFoM0BCN3uzQEIpYrOAQjik84BCOiTzgEI4pfOAQjUmM4BGPXJzQE=' > googletrends.txt

cat googletrends.txt | tail +2 | jq | grep query | grep -v "                " | cut -c 25- | tr -d "\"," > 1.txt

cat googletrends.txt | tail +2 | jq | grep formattedTraffic | cut -c 34- | tr -d "\"," > 2.txt

paste -d: 1.txt 2.txt > 3.txt
cat 3.txt
```
> **備註:**
> 小心被Google 

## 第六題

![image](https://hackmd.io/_uploads/r1IsgGcBR.png)


![LINE_ALBUM_程式紀錄_240611_2](https://hackmd.io/_uploads/HJH9ZHHHC.jpg)

![LINE_ALBUM_程式紀錄_240611_1](https://hackmd.io/_uploads/HyJtZHBSA.jpg)






```
echo "現在氣溫: $(curl -s -X 'GET'   'https:/                         /opendata.cwa.gov.tw/api/v1/rest/datastore/O-A0001-001?Authorization=CWA-AC4D5                         FC7-3E97-43F6-AEB0-CBAD45145C74&StationId=C0C700&WeatherElement=AirTemperature                         '   -H 'accept: application/json' |jq |grep '"AirTemperature":'|cut -c 29-33)"                          ; echo "目前降雨率: $(curl -s -X 'GET'   'https://opendata.cwa.gov.tw/api/v1/                         rest/datastore/O-A0001-001?Authorization=CWA-AC4D5FC7-3E97-43F6-AEB0-CBAD45145                         C74&StationId=C0C700&WeatherElement=Now'   -H 'accept: application/json' |jq |                         grep '"Precipitation":'|cut -c 29-33)";echo "目前天氣: $(curl -s -X 'GET'   'h                         ttps://opendata.cwa.gov.tw/api/v1/rest/datastore/O-A0001-001?Authorization=CWA                         -AC4D5FC7-3E97-43F6-AEB0-CBAD45145C74&StationId=C0C700&WeatherElement=Weather'                            -H 'accept: application/json' |jq |grep '"Weather":'|cut -c 22-23)"
```
操作影片 https://www.youtube.com/watch?v=6K_NuTeN5SI&t=141s
## 第七題
提示用户輸入數據 將入數據存到temp.txt檔中

從temp文件中讀取數據 echo顯示您输入的資料是
xxxxx
```
 read -p "請输入數據: " user_input 
  echo "$user_input" > temp.txt 
  content=$(cat temp.txt) 
  echo "您输入的資料是: $content"
```
user_input 存入變數 到temp_file=(mktemp)到建立暫存檔案   顯示echo "user_input" > "temp_file暫存檔   導入顯示echo "您输入的資料是 temp_file數據
```
read -p "請输入數據: " user_input; temp_file=$(mktemp); echo "$user_input" > "$temp_file"; echo "您输入的資料是: $(cat "$temp_file")"

```

## 第八題
![螢幕擷取畫面 2024-06-03 152217](https://hackmd.io/_uploads/BkvMeHrrR.png)
![螢幕擷取畫面 2024-06-03 150113](https://hackmd.io/_uploads/HJuPfBHBC.png)



#生成1到20隨機數

#提示用戶輸入猜測的數字

檢查用户輸入的數字是否為20
```
#!/bin/bash


random_number=$(( RANDOM % 20 + 1 ))


echo "請輸入一個1到20之間的數字: "
read user_guess


if [ "$user_guess" -eq 20 ]; then
    echo "答對了"
else
    echo "答錯再接再厲"
fi
```

## 第九題
![螢幕擷取畫面 2024-06-03 133527](https://hackmd.io/_uploads/H15hkHrSR.png)

![螢幕擷取畫面 2024-06-03 134759](https://hackmd.io/_uploads/HJ-01SHrR.png)
![螢幕擷取畫面 2024-06-04 101527](https://hackmd.io/_uploads/BkS4lrrrC.png)

![未命名](https://hackmd.io/_uploads/HkEmEHrHC.png)

```
#!/bin/bash


read -p "請輸入搜尋站台名稱: " user


remain=$(grep "$user" ubike.csv | cut -d, -f2)
available=$(grep "$user" ubike.csv | cut -d, -f2)


if [ "$remain" -lt 10 ]; then
    echo "請同學加快腳步喔."
else
    echo "超過10量還很多,慢慢來."
fi

echo "站台: $user"
echo "剩餘數量: $remain"
echo "可借數量: $available"
```
![image](https://hackmd.io/_uploads/ryidpRZI0.png)

```
#!/bin/bash

# 讀取站台
read -p "請輸入搜尋站台名稱: " user

# 查找指定站台的信息
station_info=$(grep "$user" ubike.csv)

# 檢查是否找到站台
if [ -z "$station_info" ]; then
    echo "無此站台"
elif [ "$(echo "$station_info" | wc -l)" -gt 1 ]; then
    echo "多個匹配站台，請更具體"
else
    # 獲取站台數量可借數量
    remain=$(echo "$station_info" | cut -d, -f13)
    available=$(echo "$station_info" | cut -d, -f14)

    # 顯示站台名稱、剩餘數量和可借數量
    echo "站台: $user"
    echo "剩餘數量: $remain"
    echo "可借數量: $available"

    # 檢查剩餘數量是否小於 10，並顯示相應的提示
    if [ "$remain" -lt 10 ]; then
        echo "請同學加快腳步喔."
    else
        echo "超過10量還很多,慢慢來."
    fi
fi
```
![螢幕擷取畫面 2024-06-04 101854](https://hackmd.io/_uploads/r1lUSBSHR.png)


![image](https://hackmd.io/_uploads/HylXTA-L0.png)



## 第十題
![未命4](https://hackmd.io/_uploads/BJKrESBHR.png)

```
!/bin/bash

if [ -z "$1" ]; then
    echo '請輸入要查詢帳號'
    exit 1
fi

# 用戶信息寫入 who.log
who > who.log

# 使用 csvtool 和 grep 查找用戶
result=$(csvtool -t " " col 1 who.log | uniq | grep "^$1$")

# 檢查 result 變量是否為空
if [ -z "$result" ]; then
    echo "$1 不在線上"
else
    echo "$1 正在開心聊天"
fi
```

![螢幕擷取畫面 2024-06-03 114746](https://hackmd.io/_uploads/B1GOyHHBA.png)

## 第十一題
初始化一個數组來存儲用戶輸入的數字
寫一程式，讓使用者輸入任意個數字，輸入quit可以結束輸入，當結束的時候，把使用者輸入的數字全部顯示出來
```
/bin/bash
  
 
   numbers=()
   echo"======================================================="
  echo 'hello'
 echo"======================================================="
  
   echo "炸彈密碼"
 
  # 進入一個無限循環來讀取用戶輸入
  while true;
  do
      read -p "請輸入數字（quit 結束）: " input
 
     # 檢查用戶是否輸入了 "quit"
      if [ "$input" == "quit" ];
     then
         break
      fi
 
     # 將輸入的數字添加到數组中
      numbers+=("$input")
  done
 
  # 輸出所有輸入的數字
 echo "您輸入的密碼是: ${numbers[@]}"
```

## 第十二題

```
#!/bin/bash

for a in *
do
  if [ -f "$a" -a -x "$a" ]; then
    echo "$a 是執行檔"
  fi
done
```

## 第十三題

寫一程式，可以在畫面上輸出指定層數的聖誕樹
例如:

$ tree.sh 5
會顯示
```
  *
  **
  ***
  ****
  *****
```
![未命名.4](https://hackmd.io/_uploads/SydsHrrrC.jpg)

```
for i in $` seq 1 1 $1`
  do
   for j in `seq 1 1 $i`
 
  do
      printf '*'
  done
 
  printf '\n'
  done
```
聖誕樹


```
height=10
 
 for ((i = 1; i <= height; i++))
 do

   for ((j = i; j < height; j++))
   do
```
## 第十四題
寫一程式，可以顯示九九乘法表如下:



```
2 x 1 = 2       3 x 1 = 3       4 x 1 = 4       5 x 1 = 5
2 x 2 = 4       3 x 2 = 6       4 x 2 = 8       5 x 2 = 10
2 x 3 = 6       3 x 3 = 9       4 x 3 = 12      5 x 3 = 15
2 x 4 = 8       3 x 4 = 12      4 x 4 = 16      5 x 4 = 20
2 x 5 = 10      3 x 5 = 15      4 x 5 = 20      5 x 5 = 25
2 x 6 = 12      3 x 6 = 18      4 x 6 = 24      5 x 6 = 30
2 x 7 = 14      3 x 7 = 21      4 x 7 = 28      5 x 7 = 35
2 x 8 = 16      3 x 8 = 24      4 x 8 = 32      5 x 8 = 40
2 x 9 = 18      3 x 9 = 27      4 x 9 = 36      5 x 9 = 45

6 x 1 = 6       7 x 1 = 7       8 x 1 = 8       9 x 1 = 9
6 x 2 = 12      7 x 2 = 14      8 x 2 = 16      9 x 2 = 18
6 x 3 = 18      7 x 3 = 21      8 x 3 = 24      9 x 3 = 27
6 x 4 = 24      7 x 4 = 28      8 x 4 = 32      9 x 4 = 36
6 x 5 = 30      7 x 5 = 35      8 x 5 = 40      9 x 5 = 45
6 x 6 = 36      7 x 6 = 42      8 x 6 = 48      9 x 6 = 54
6 x 7 = 42      7 x 7 = 49      8 x 7 = 56      9 x 7 = 63
6 x 8 = 48      7 x 8 = 56      8 x 8 = 64      9 x 8 = 72
6 x 9 = 54      7 x 9 = 63      8 x 9 = 72      9 x 9 = 81
```
```
for ((i = 1; i <= 9; i++))
 do
   for ((j = 1; j <= 9; j++))
   do
     printf "%d*%d=%2d\t" $i $j $((i * j))
  done
  echo
  done
```

![image](https://hackmd.io/_uploads/rJl6UJzI0.png)




 
 ![image](https://hackmd.io/_uploads/rJ2gzkzLR.png)

  
  
## BeautifulSoup台灣銀行匯率

```

import requests
from bs4 import BeautifulSoup
import csv
import time

# Taiwan Bank exchange rate URL
url = 'https://rate.bot.com.tw/xrt?Lang=zh-TW'

# Step 1: Fetch the HTML content from the website
response = requests.get(url)

# Step 2: Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

# Step 3: Extract exchange rate data
result = []

# Find all rows in the table body (exchange rates are inside the tbody)
trs = soup.tbody.find_all('tr')

# Iterate over each row in the table
for i in trs:
    rate = []

    # Currency name (like USD, EUR, etc.)
    currency = i.td.div.find_all('div')[1].text.strip()
    print(currency)  # Print the currency name
    rate.append(currency)

    # Find the different exchange rates
    for data_table in ['本行現金買入', '本行現金賣出', '本行即期買入', '本行即期賣出']:
        # Find the exchange rate by searching for the correct data-table attribute
        flag = i.find(attrs={'data-table': data_table})
        rate_value = flag.text.strip() if flag else 'N/A'
        print(f'  - {data_table}: {rate_value}')  # Print the exchange rate
        rate.append(rate_value)

    # Add the extracted data to the result list
    result.append(rate)

# Step 4: Save the data to a CSV file
# Generate a filename based on the current date and time
filename = time.strftime('%Y%m%d_%H%M%S.csv')

with open(filename, 'w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    
    # Write headers to the CSV file
    writer.writerow(['幣別', '本行現金買入', '本行現金賣出', '本行即期買入', '本行即期賣出'])

    # Write the exchange rate data to the CSV file
    writer.writerows(result)

print(f"Exchange rates have been saved to {filename}")


```


  

 

  

  

 




  


## AI生成圖


** openart**

![image](https://hackmd.io/_uploads/SyNOwDJUC.png)


![image](https://hackmd.io/_uploads/Sk7GSw1UC.png)


The output image will have the same aspect ratio

![image](https://hackmd.io/_uploads/SkhKYDyI0.png)


![image](https://hackmd.io/_uploads/Sy7LtD1LC.png)





![image](https://hackmd.io/_uploads/rkvXIPk8R.png)



![image](https://hackmd.io/_uploads/rkQZDPk80.png)



![image](https://hackmd.io/_uploads/HJuEUwJUA.png)


![image](https://hackmd.io/_uploads/SyKrLvkU0.png)


![image](https://hackmd.io/_uploads/rytU8DJ8A.png)



## leonardo ai 


![image](https://hackmd.io/_uploads/BJR58PkUC.png)

![image](https://hackmd.io/_uploads/SkNnLv1U0.png)


![image](https://hackmd.io/_uploads/ryT_8w1UR.png)

![image](https://hackmd.io/_uploads/HyOFLvk8C.png)


![image](https://hackmd.io/_uploads/BJzqLPk8R.png)


## git版本控制

參考 https://w3c.hexschool.com/git/b9be5b1e
github

本地端

![image](https://hackmd.io/_uploads/HyHYvacwA.png)


 遠端

 ![image](https://hackmd.io/_uploads/SJ2iwp5vC.png)
 
 
 
 ## python 控制瀏覽器 關機
 
 ```
 import subprocess

# 打開檔案總管
subprocess.run('explorer')

# 打開Chrome並前往Yahoo
subprocess.run('C:\Program Files\Google\Chrome\Application\chrome.exe https://www.yahoo.com.tw')

# 關機
subprocess.run('shutdown /s')
```

## Git 指令來新增版本


開新資料夾，git init 建立數據庫
新增一個 ind.txt 檔案
這時，您可以輸入 git status 指令去查看

Git 偵測到你有新增這筆檔案，但尚未是 Git 追蹤的對象。

所以必須先將它加入到 (索引)裡

Changes to be committed的意思是，放在索引的檔案即將會被提交成一個新版本(commit)。

此時可以透過以下指令，來提交一個新版本。

git commit -m "<填寫版本資訊>"
所以這裡我就輸入git commit -m "新增網頁"來提交版本後，系統如果回饋以下訊息，就恭喜你，你透過 Git 建立出第一個版本出來了。

  簡易版
開新資料夾，git init 建立數據庫
新增一個 ind.txt 檔案
加入索引：git add .
提交版本：git commit -m "新增網頁"
觀看歷史紀錄：git log，並會看到一個版本紀錄

![image](https://hackmd.io/_uploads/ByoEsLSt0.png)

git remote add <url>：在本地端數據庫，添加遠端數據庫
git push <數據庫簡稱> <分支名稱>：更新遠端數據庫資料
    
查看遠端倉庫的資訊
指令： git remote -v
功能： 顯示已配置的遠端倉庫。
    
GitHub 上建立遠端數據庫，再 clone 下來
在 GitHub 建立了一個遠端數據庫
使用 git clone <url> 指令，抓取一份數據庫下來在本地
新增了兩個 commit 在本地數據庫
使用 git push origin master 指令推送到 GitHub 更新
    
    
    
## 簡化加入本地數據庫的方法：

新建本地數據庫（Local Repository 只需要新建一次就好）
    
```
git init
```
將檔案移入索引中
  
```
git add .
```
將索引內的檔案提交至本地數據庫

```
git commit -m "message"
```
加入遠端數據庫（GitHub）的方法：

先自行新建好 GitHub 的 Repository，開啟終端機，在該目錄下輸入以下指令

# 這行指令只需要輸入第一次即可
```
git remote add origin <your url>
```
# 分支
```
git branch -M main
```
```
git push -u origin main
```
所以當接下來有新增檔案 或是 修改檔案時，只需要執行以下幾個步驟即可：
```
git add .
git commit -m "message"
git push -u origin main
```
而幾個較常用來查看 Git 的指令：

當檔案還在檔案（File） 與索引（Index）
    
```
git status
```
當檔案已經加入本地數據庫（Local Repository）
    
```
git log
```   
https://youtu.be/F-IXLMQZAP0


























