2 命令行入門 2019.9.14 五大命令行工具 二進位可執行文件 shell內置命令 解釋性腳本 shell函數 別名 1. shell函數 shell函數就是由shell自己執行的函數,在我們這裡就是由 Bash 執行的函數 我們定義了一個 fac() 函數,使用 seq 生成一串數字,用 p ...
2-命令行入門
2019.9.14
五大命令行工具
- 二進位可執行文件
- shell內置命令
- 解釋性腳本
- shell函數
- 別名
- shell函數
$ fac() { (echo 1; seq $1) | paste -s -d\* | bc}
$ fac 5
120
- shell函數就是由shell自己執行的函數,在我們這裡就是由 Bash 執行的函數
- 我們定義了一個 fac() 函數,使用 seq 生成一串數字,用 paste 函數將這些數字放到一行中並用 * 分隔開,然後將這個等式傳給 bc,由它求值並顯示結果
- 文件
~/.bashrc
是 Bash 的配置文件,所有的 shell 函數皆可在此定義,這樣的好處是 shell 函數隨時可用
- 別名
$ alias l = 'ls -1 --group-directories-first'
- 別名沒有參數,所以 fac() 這樣的函數不能用別名定義。
- 別名能減少敲擊鍵盤的次數;
- 別名經常是在 '.bashrc' or '.bash_aliases' 配置文件中定義
不帶參數運行
alias
即可查看所有的參數的別名。一般 ubuntu 上的預設別名有以下幾個,不得不說,不看一下還是真的不知道$alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto'
type -a
用法
$ type -a cd
cd is a shell builtin
$type -a fac
fac is a function
fac ()
{
( echo 1;
seq $1 ) | paste -s -d\* | bc
}
命令行工具的組合--管道組合
- 將一個工具的輸出傳遞給下一個工具,這樣可以幾乎沒有限制的不斷傳遞
$ seq 30 | grep 3
3
13
23
30
# 生成1-30的序列傳給 grep,篩選出含有3的元素顯示
# grep: 篩選元素
$ seq 30 | grep 3 | wc -l
4
# 在上一步的基礎上統計行數
# wc: 計數功能;參數 -l 只輸出行數量
輸入和輸出重定向
- 管道中最後一個命令行工具是輸出到終端,我們也可以將其保存到文件中;
# 我們在當下目錄下新建文件 test
$ seq 1 > test
$ cat test
1
# 用序列1 覆蓋test文件
$ seq 3 >> test
$ cat test
1
1
2
3
# 在test文件末尾加上序列3
$ echo -n "hello" > test
$ cat test
hello$...
# echo -n:就像上面的效果,hello 之後緊接著就是下一個 bash 語句
$ echo "hello" > test
$ cat test
hello
$ ...
# 沒有參數 -n,hello後面相當於有個 \n;
# 同樣的,> 和 >> 的區別在於覆蓋還是在末尾添加
$ echo "hello, world" >> test
$ cat test
hello
hello, world
$ cat test | wc -w
3
# 使用管道組合,wc -w 這個參數表示只統計單詞數量
# 這條語句也有很多的等價寫法:
$ < test wc -w
3
$ wc -w test
3 test
# 這些等價寫法的好處在於不進行額外的進程
處理文件
- mv
- cp
mkdir
- 以上所有命令都可以加參數 -v(verbose 詳細),讓工具輸出正在進行的操作
除了 mkdir 都可以加 -i(interactive 交互),能讓工具向你確認請求
尋求幫助
- man (manual)
- help
- tool -h / --help
$ man cat
# 輸出不止一頁,所以我們可以控制頁面寬度
$ man cat | head -n 20
# 只輸出前20行,也可以用fold;將較長的行變為80字元長度
$ man cat | fold
# 使用 help 可以查看 shell內置命令
$ help cat | head -n 20
# 第三方工具可以使用 -h 查看自帶的幫助信息
$ java -h