【練習】bash shell
shell分兩個系列,bourne bash和c bash。
除csh、tcsh屬於c bash,其他一般屬於bourne bash。
[echo]
[script]
.sh的腳本執行有兩種方式:
1、指明用bash shell解釋:bash 文件名
bash hello.sh
2、先給755許可權,然後直接文件相對路徑或絕對路徑,回車(只有可執行文件才可以被執行)
./hello.sh 或 /root/practice/hello.sh
注意bash中#!/bin/bash要寫對,不然報錯bad interpreter: Permission denied
root@Grace:~/practice# vi hello.shroot@Grace:~/practice# ls ./hello.shroot@Grace:~/practice# ls -rtl hello.sh-rw-r--r-- 1 root root 66 Jul 29 20:56 hello.sh #默認創建不是755許可權root@Grace:~/practice# bash hello.sh #法1 田田田田 root@Grace:~/practice# ./hello.sh # 法2-bash: ./hello.sh: Permission deniedroot@Grace:~/practice# chmod 755 hello.shroot@Grace:~/practice# ./hello.sh-bash: ./hello.sh: /usr/bin: bad interpreter: Permission denied
修改之後:
root@Grace:~/practice# /root/practice/hello.sh #法2 田田田田 root@Grace:~/practice# ./hello.sh 田田田田
[alias]
查看、修改、刪除別名
自定義別名:
在bash中定義時臨時的,如果想永久生效,寫入~/.bashrc。
保存並不會讓~/.bashrc立即生效,要麼退出shell重新登陸重登陸時會讀取這個文件,要麼source ~/.bashrc刷新配置
[priority]
按以下順序查找:
1、絕對路徑
2、別名
3、linux內部命令
4、$PATH 外部命令
所以,只要定義了和原系統命令同名的別名,就會覆蓋(慎重)。
例如alias rm ="rm -i"
[快捷鍵]
ctl + a
ctl + e
ctl + u:刪除本行游標以前
ctl + r :搜索歷史命令
ctl + l :清屏
[history]
歷史命令位於~/.bash_history下,當前shell的命令在內存中,只有正確退出才追加到文件。
history -c 清空內存中的歷史命令,但不同步覆蓋文件
history -w 寫入文件,不用退出登錄。
默認保存1000條,可以在配置里改
!!
!2
命令自動補全:命令的範圍是根據$PATH查找
[重定向]
正確輸出:
>或>>
root@Grace:~# date > date.txtroot@Grace:~# cat date.txtSun Jul 29 23:20:05 CST 2018root@Grace:~# date > date.txtroot@Grace:~# cat date.txtSun Jul 29 23:20:10 CST 2018root@Grace:~# date >> date.txtroot@Grace:~# cat date.txtSun Jul 29 23:20:10 CST 2018Sun Jul 29 23:20:19 CST 2018root@Grace:~# date >> date.txtroot@Grace:~# cat date.txtSun Jul 29 23:20:10 CST 2018Sun Jul 29 23:20:19 CST 2018Sun Jul 29 23:20:26 CST 2018
錯誤輸出:
2> 或 2>>
root@Grace:~/practice# lss 2> error.logroot@Grace:~/practice# cat error.logNo command lss found, did you mean: Command les from package atm-tools (universe) Command ss from package iproute2 (main) Command gss from package libgss-dev (universe) Command lsh from package lsh-client (universe) Command ls from package coreutils (main) Command lrs from package lrslib (universe) Command lvs from package lvm2 (main) Command lsw from package suckless-tools (universe) Command lssu from package nilfs-tools (universe) Command less from package less (main) Command lsx from package suckless-tools (universe) Command ass from package irpas (multiverse)lss: command not found
混合輸出:
>> file 2>&1
&> file
root@Grace:~/practice# date >> mix.log 2>&1root@Grace:~/practice# datee >> mix.log 2>&1root@Grace:~/practice# root@Grace:~/practice# root@Grace:~/practice# cat mix.logTue Jul 31 21:54:53 CST 2018No command datee found, did you mean: Command date from package coreutils (main)datee: command not foundroot@Grace:~/practice# rm mix.logroot@Grace:~/practice# root@Grace:~/practice# date &> mix.logroot@Grace:~/practice# root@Grace:~/practice# cat mix.logTue Jul 31 21:56:29 CST 2018root@Grace:~/practice# date >> mix.log 2>> mix.logroot@Grace:~/practice# cat mix.logTue Jul 31 21:56:29 CST 2018Tue Jul 31 21:58:11 CST 2018
扔到垃圾桶
ls &>/dev/null
輸入重定向
root@Grace:~/practice# wc<hello.sh 4 10 67root@Grace:~/practice# cat hello.sh#!/bin/bash# my first bashecho -e "e[1;33m 田田田田 e[0m"
[多命令順序執行]
;連接,各個cmd各不相干,但即使前面錯了後面也會繼續執行
cmd1 && cmd2 || cmd3
root@Grace:~/practice# date;pwd;lsTue Jul 31 22:14:45 CST 2018/root/practice1.txt error.log goodnight.sh hello.sh mix.log normal.logroot@Grace:~/practice# ls && echo yes || echo no1.txt error.log goodnight.sh hello.sh mix.log normal.logyes
[管道]
ll -a|morenetstat -an|grep "ESTABLISHED"
[通配符]
[變數與轉義]
單引號括起來不轉義,雙引號括起來會轉義
反引號括起來是命令執行的結果,可以用$()替換.
$foo調用變數的值
root@Grace:~# foo=oneroot@Grace:~# echo $foooneroot@Grace:~# bar="$foo"root@Grace:~# echo barbarroot@Grace:~# echo $ bar$ barroot@Grace:~# echo $baroneroot@Grace:~# bar=$fooroot@Grace:~# echo $bar$fooroot@Grace:~# result=`date`root@Grace:~# echo $resultTue Jul 31 22:41:38 CST 2018root@Grace:~# root@Grace:~# result=$(date)root@Grace:~# echo $resultTue Jul 31 22:41:58 CST 2018
視頻鏈接:通配符, Linux達人養成計劃 I教程-慕課網
推薦閱讀:
※Bash shell常見錯誤
※這行shell命令改如何優化?
※Shell
※python好庫之sh
※Mac 所有命令失效的解決辦法
TAG:Bash |