iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1

嗨,各位
昨天我們已經稍微揭開了Linux神秘(?)的面紗
今天要往更深層一點的地方探索啦

警告:今天內容會比較多(不然我感覺會寫不完XD)

shell,中文譯作"殼"或是"外殼"
當你(妳)在終端機敲下指令時,大致上是發生這些事情
大致上的情況是

  1. 終端機的套件會把指令傳給shell
  2. shell再把指令所對應的動作傳給os

    *圖:自繪
    (當然,即使不懂這些東西你(妳)還是能好好用終端機啦)

如果要查看現在在使用的shell內建哪些功能可以使用"help"指令查看

help

而關於shell,我認為這些是最基本操作

變數
設定變數
變數名稱 = 內容

vp=1 teaching="linux"

取用變數的語法則是在變數名稱前加上"$"

$vp $teaching

這時侯如果用echo把它們印出來的話

 echo $vp $teaching

會顯示這樣

1 linux

子指令
子指令如其名,也就是在指令裡面再塞一個指令
也就是說父指令會抓子指令執行後的回傳值變成自己執行的一部分
子指令的用法

指令 $(子指令)

這裡是一個很無感的範例XD
echo $(whoami)
在這個範例裡,echo指令讀到whoami指令所回傳的使用者名稱並把它顯示在畫面上
不過一般來說直接打whoami就好了

特殊的變數
在shell裡具有特殊意義的變數

顯示目前執行指令的地方(好比說bash或是腳本)
$0

當腳本需要傳入參數的話可以這樣使用
第一個參數為1,第二個參數為2...以此類推
$1 $2 $3

當你(妳)需要看指令或是應用程式的結束狀態碼時可以這樣用
$?
一般執行成功時會把這個變數改為0
執行失敗則會改成其他數值(例如127)

而給shell執行的script(腳本)就叫"shell scrript"啦
shell scrript一般來說檔案的副檔名會以".sh"結尾而在腳本裡一般來說第一行會有這樣的東西

#!/bin/sh

在shell scrript中第一行的"#!"是用來指定用來執行的shell

而對於shell script最基本的用法就是把所有需要用的指令都放進去
好比說你(妳)想要在執行apt update後apt upgrade的話可以像這樣寫個簡單的sh

#!/bin/bash
sudo apt update
sudo apt upgrade

如果要把讓使用者輸入並存到變數的話可以這樣
(在畫面上顯示"請輸入提款卡密碼",並把使用者輸入的內容存到"password"變數中)
read -p "請輸入提款卡密碼" password

而如果你(妳)有稍微學過一些程式或是指令的話
相信對於類似if、else、while這些東西不會太過陌生
而這些是它們的用法

if的寫法(注意,那個在判斷式前後的空格很重要 )

#!/bin/bash
 if [ 判斷式 ] then
 	一些指令
 else
 	一些指令
 fi

成立時執行then後面的內容
除此之外執行else後的內容
以"fi"結尾

for的寫法

#!/bin/bash
for var in $(seq 1 5)
do 
echo $var
done

以do開始,done結尾

while的寫法

#!/bin/bash
while [ 1 ]
do
 	當判斷式為True時持續執行
done

以do開始,done結尾

提到shell就不得不提到shell的設定到
以bash來說,你(妳)會看到在家目錄下有這樣的一個檔案".bashrc"
這個檔案就是在使用者開啟終端機時會載入的設定檔
裡面可以設定像是歷史紀錄大小或是歡迎訊息等相關設定
而如果有東西需要每次都設定的話也可以放這裡
像是我們前面提到的alias如果不想要每次重開終端機就失效的話,存這裡就對了
以我自己的alias來說,這些是我習慣的用法

alias python='python3.7'
alias pip='pip3'
alias cls='clear'
alias cd..='cd ..'
alias vpn='sudo openvpn --config /etc/openvpn/example/client.conf'

對於指令的紀錄我不太希望被刪掉,所以我會在rc裡設定一個蠻大的值

HISTSIZE=10000000
SAVEHIST=10000000

而以bash執行的歷史紀錄來說會存在"~/.bash_history"裡

以上這些就是關於"shell"的簡單介紹啦
↓寫這篇文章的時候在聽的歌
Some - BOL4
那我們明天見嘍,88


上一篇
Day14-你的名子
下一篇
Day16-水管工人
系列文
阿宅從0開始玩的開源軟體30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言