Linux基礎語法,Shell基礎腳本

Linux基礎語法:

1. /   :絕對路徑:/home/anaconda3

      相對路徑:anaconda3

      用戶home: ~

2. pwd :輸出當前工作目錄的全名

3. ls :列出目錄內容

ls -l :長清單格式

ls -a :所有條目

ls -d :列表目錄

ls -R :列出子目錄

ls -1 :一行顯示一個名字

ls -F :有分類的目錄,名字後面加字符(*【可執行的文件】、/【路徑】、@【鏈接】、|【兩個進程要用這個鏈接】、=【網絡連接socket】)

4. gedit :編輯文本文件

5. echo :查找環境變量

echo $PATH 環境變量(裏面全是路徑,分號是分隔符,Windows和Linux都是path作爲環境變量)

6. printenv :打印出所有的環境變量(都是XXX=xxx的格式)

7. grep :幫助查找(printenv | grep PATH 把前面的的輸出作爲後面的輸入)

grep -i :不區分大小寫的搜索

grep -w :只匹配完整的單詞

grep -l :只顯示匹配的文件名

grep -r :在當前目錄和所有子目錄中搜索

grep -n :用行號列出匹配的行

grep -v :反操作,顯示不匹配的項目

grep --color :顯示匹配的顏色

grep --include :通過名字類型查找文件

舉例子:

printenv | grep path :查找名字是path的環境變量

printenv | grep -i path :不區分大小寫的查找名字是path的環境變量

grep -ir python . :從當前路徑開始找所有包含python的文件;r是一直找下去;.是很特殊的路徑指當前路徑;..是指父親的路徑;要是想查找一段文字要用引號引起來 ”python path name”

grep -ir python file1 :在file1中找到python文件

grep -ir “python$” . :從當前路徑查找以python結尾的

grep -ir --include *.py math ~ :--include *.py表示只看.py結尾的文件,其他不看;math是要找的東西;~是從home裏面找

8. man :說明書菜單,可以解釋命令的用法

9. env :也是查詢(env | less :只顯示一頁可以用鍵盤的上一頁下一頁來控制頁面的顯示;env | more和less功能一樣,但是less更強大,因爲more要把所有的文件都緩存到內存裏纔開始顯示,而less是有多少先顯示多少)

10. | :是管道的意思,把前面的輸出作爲後面的輸入,可以接很多個

11. clear :把屏幕清掉

12. file :鑑定文件類型,是個鏈接,連接到另外一個地方去,看文件裏面是什麼

13. wc :統計命令

wc -w :統計有多少字

wc -I :統計有多少行

wc -L :統計最長的一行有多長

ls –1F | grep “*” | wc –I*是特殊字符,所以使用時候要加””

【很常用,統計有多少條命令】

ls –1F | grep “@” | wc –I*是特殊字符,所以使用時候要加””

【很常用,統計有多少條鏈接】

14. head : 列舉文件的頭幾行,查看文件時會用到

head -5 zipfile.py:顯示開始的幾行

15. tail :顯示尾巴上的幾行

tail -f file:實時跟蹤文件的最後幾行

16. mkdir :創建目錄路徑;要創造一整套的路徑

mkdir –p ~/tmp3/abc/xyz不用分別創建,直接輸命令就可以

17. tree ;可以吧當前路徑寫成樹的形式

18. cp :複製文件或者路徑

cp ~/anaconda3/lib/python3.6/zip* .   複製該文件到當前文件夾下

cp f1 f2    複製f1到f2中

cp –r d1 d2  把d1和它的子文件都複製到d2中

19. cat :把幾個文件合併爲同一個文件生成一個新的

cat zip* > my.py  把cat和zip合起來公洞放到my.py中去

cat –n my.py  顯示一個文件,把行號也顯示出來

20. 標準輸入stdin標識爲0輸出,輸出要輸出兩個,一個是正常輸出stdout標識爲1,一個輸出錯誤信息stderr標識爲2

<   重定向進命令

>   重定向輸出到文件中去,並且重寫

>>  重定向輸出到文件中去,但是不重寫,附加

2>  重定向輸出到文件中去,輸出的是錯誤的,並且重寫

2>>重定向輸出到文件中去,輸出的是錯誤的,但是不重寫

ls ~ /Toronto > ~/out.txt 2> ~/err.txt

生成兩個新的文件,錯誤信息輸到err.txt,正確信息輸到out.txt

21. hexdump :把文件原始的數字顯示出來,十六進制

hexdump -C my.py  按字符把所有的數字輸出出來

22. which :給出命令的原始路徑

23. ln :軟鏈接連接到文件,可以直接到那個位置

24. sudo :升級成超級root用戶

sudo ls -alR /root

顯示root下的所有文件,並且包含所有子路徑

25. tar :打包和解壓

tar czvf demo.tar.gz *  把當前路徑下所有東西打包放到demo.tar.gz中

tar xzvf demo.tar.gz *  把demo.tar.gz中的所有東西都取出來放到當前路徑下

# extract all files in demo.tar.gz into current directory

26. find :找文件

find / -name 'tar'  從/這個文件下找名字是tar的文件

find ~/tmp -name '*.txt' -type f -exec d -C {} \;  從~/tmp 文件下找名字是*.txt類型是文件並且執行命令

-name  後面加名字

-type  後面加類型

-exec  後面加想要執行的命令,前面找到的東西是後面命令的輸

\;  表示命令的結束

27. date :輸出或者設置日期和時間

date +%Y-%m-%d  年月日2017-12-23和%F一樣

date +%H:%M:%S  時分秒13:29:03和%T一樣

date +%I:%M:%S  以12小時來顯示當前的時分秒

date +%c  當前的本地系統時間

date -u  UTC的日期和時間

date -R  RFC-2822格式的時間

date -Iseconds  ISO-8601格式的時間輸出到秒,如果最後是Iminutes就是輸出到分鐘,注意是大寫的i:I

28. cut :把一串字符串切開

date -u | cut -d ' ' -f2,3,6  把時間,以空格爲工具來切並且取出第2個,第3個和第六個域但是空格和空格相連也會把空格選出來

 cut -d ' ' -f1,2 /etc/mtab  把/etc/mtab裏的文件,以空格爲工具來切並且取出第1個,第2個

29. tr :轉換,壓縮,刪除字符串

date -u | tr 'a-z' 'A-Z'將所有的輸出都轉換成大寫

echo 'abcdefg' | tr7 -d 'b-e'  把b到e之間的都刪掉

echo 'abbbbg' | tr -s 'b'  把中間重複的b壓縮成一個

30. nohup :當窗口退出的時候,使得命令繼續執行;該命令將不接收輸入,所有輸出,包括任何錯誤消息,都將寫入文件nohu .out;該命令將作爲前臺進程運行,後面跟着&時在後臺處理

nohup jupyter notebook &  在後臺運行jupyter notebook

nohup comm >/dev/null 2>&1 &  在後臺運行comm >/dev/null:把輸出輸到/dev/null;2>&1:把錯誤輸出和標準輸出輸出到一起

31. ps :顯示當前進程的信息

ps aux  顯示所有的進程

ps -x  只是顯示自己的進程

ps -e --forest  用樹的形式顯示進程

ps -eo pid,user,cmd  有選擇的查看進程。Pid:進程id;user:哪個用戶啓動的;cmd:查看命令行

32. kill :送一個信號給進程,用來關閉或者其他操作

kill -l  顯示可以使用的信號

kill -9 1234  發送無條件終止信號給ID爲1234的進程

kill 1234  發送終止信號給ID爲1234的進程

33. passwd :設置、修改或者管理用戶密碼

34. 權限:

chmod :改變文件的權限

                    +  增加權限

-  減少權限

=  設置權限

U,g,o,a  user,group,other,all

1=x;3=wx;2=w;5=rx;4=r;6=rw;7=rwx

35. rm :移除文件或者路徑

rm dir/file  刪除dir中的文件

rm -r dir  刪除dir和他的內容

rm -d dir  刪除空的dir

36. rmdir :刪除路徑

rmdir tmp/d1/d2  d2會被刪除

rmdir -p tmp/d1/d2  tmp,d1,d2都會刪除

37. ping :發送ICMP ECHO_REQUEST給網絡用戶

 

Shell腳本:

是一個包含一系列命令的文本文件

1. for循環

$*給你一個包含所有參數的字符串,不能在for循環中提供字符串列表,必須以"$*"開頭

echo "Command-line parameters: $*"  這是一個反射命令

$@提供for循環中的字符串列表

for arg in "$@"       這是一個for循環語句,arg是一個變量

do                 dodone是“for循環”主體

echo "arg: $arg"  arg會被變量的值取代

done

2. while循環

$#提供參數的數量   -gt是大於0的意思

$0是命令本身

第一個參數是$1,第二個參數是$2

while [ $# -gt 0 ]; do              這是“while循環,從dodone是它的主體

     case $1 in                  這是case語句,以esac結尾

        -a | --aA )echo "Got $1"   如果$1的值-a-aA,則執行此塊;|:或者

            ;;

        -b | --bB )echo "Got $1"   如果$1的值是-b-bB,執行這個block

            ;;

        * ) echo "Received $1"    所有其他情況執行此塊

    esac

    shift                       shift將刪除第一個參數,依次往後刪

done

3. var變量

本質上,Bash變量是字符串。

varA=1234                  我們不需要聲明變量

varB=${varA/23/'A B C'}        把A中的23編程A B C並且輸出

var=${MYTEST}               環境變量可以直接使用

設置環境變量使用export MYTEST=233;想要查看使用env | grep MYTEST

thatVar=varA                 thatVar的值是一個變量的名字

var=${!thatVar}               間接引用;將varA的值賦給var,如果不加!就會直接取出thatVar中的值;加了!就是取出變量裏面變量的值

var=`ls -l`                    將命令的結果賦值給變量

$?                          上一個命令執行的結果

$$                          本身進程的ID

 

展開並計算(())之間的整數表達式

Bash允許對變量進行算術操作和比較。

決定因素是該值是否只含有數字

v1=123 v2=567

((var=$v1+$v2*890))

echo "var is: $var"              最後值是504753

4. 引號的使用

var=`ls -l`           `用來執行,把結果給變量

echo $var           裏面空格作爲分隔符的值的集合,變量裏可以存放很多值

echo "$var"         雙引號括起來之後就是一個值了,變量裏原來是什麼就是什麼

echo '$var'          單引號括起來,輸出單引號裏面的值

for a in $var; do      循環裏的不加引號就是用空格分割開的值的集合

echo "=> $a"

done

for a in "$var"; do    用雙引號引起來裏面就一個值,就是$var一個值

echo "=> $a"

done

5. if語句(命令和參數之間一定要用空格隔開)

if 結束妝臺                         0代表真,其他代表假

then

if test 比較表達式或文件測試

then

if [ 比較表達式或文件測試 ]   單括號其實就是test

then

建議使用擴展測試命令。[[和]]是語言裏保留的字,並不是一個命令

if [[比較表達式或文件測試]]

then

實際操作中並不需要if語句

v1="Toronto" v2="Beijing"

[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"

如果前面爲真就會執行後面的

v1=123 v2=45

[[ "$v1" -gt "$v2" ]] && echo "$v1 is greater than $v2"

數字比較大小使用-gt,123更大

[[ "$v1" > "$v2" ]] || echo "$v2 is greater than $v1"

字符串比較使用符號。45更大,因爲4比1大

dir=~/xyz

[[ -d "$dir" ]] || echo "directory $dir does not exist"

-d表示看看後面的是不是可以執行成一個路徑,如果前面爲假纔會執行後面的

file=~/tmp/readMe.txt

[[ ! -f "$file" ]] && echo "file $file not found."

-f表示看看後面的是不是一個文件

v1=$1 && [[ -z "$v1" ]] && v1=DEFAULT

-z表示查詢後面的裏面有沒有值,如果命令行有值就用命令行裏的值,如果沒值就用給的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章