1. 程式人生 > >學習筆記(7)

學習筆記(7)

學習筆記

1.命令執行錯誤,後續命令繼續執行,語法錯誤後續命令將不再執行

2.bash -n 只檢查語法錯誤,不檢查命令錯誤

3.使用雙引號可以保留文本格式 name=`cat /etc/fstab`,echo "$name"

4.name1=magename2=wang name3=$name1 echo $name3 name1=zhangsi echo $name3

5.type if 可以查看是否為關鍵字

6.普通變量只在當前會話有效,在子進程中無效,在其他終端也無效,子shell定義的變量不影響父shell定義的同名變量

7.echo $$ 查看當前進程的進程號 echo $PPID 查看父進程編號

8.pstree -p 查看進程樹

9.子進程不能修改的全局變量

10.export 顯示系統的環境變量,也可以使用declare 來顯示環境變量,declare -x name 創建環境變量,env也可以顯示環境變量

11.declare -x name=xixi 也可以使用declare -x 來顯示系統的環境變量

12.系統自帶的環境變量是通過讀取配置文件讀入的,所以自定義變量(包括環境變量)可以通過退出當前會話來取消,也可以通過unset取消

13.set 顯示系統的所有變量,declare 也為顯示系統的所有的變量(環境變量和普通變量)

14.腳本中定義的變量要記得unset變量,以便系統回收占用的內存

15.lscpu顯示cpu信息

16.查看硬盤大小lsblk ,df 只能查詢分區大小

17.$PATH 中的/root/bin 可以作為腳本的存放目錄,不需要使用路徑,此目錄需要手動創建

18.echo -e "\e[1:31m start backup ... \e[0m" 輸出顏色字體, echo -e "\e[1;31m start \e[0m"

#!/bin/bash

color_num=$[RANDOM%7+31]

echo "color_number :$color_num"

echo -e "\e[1;${color_num}mCOLOR \e[0m"

19.echo $SHLVL 查看shell嵌套深度,可用來查看當前shell的層數 (LVL: level)

20.echo $_ 前一個命令的最後一個字符串,可以使用command $_ 來執行上一條命令的最後一個參數

21.只讀變量不能修改不能刪除,生命期為進程的生命期,退出會話環境變量取消

22.declare -r 顯示系統的只讀變量,declare -r name=zl(readonly name=zl)

23.防止修改系統環境可以使用(umask 666; touch /data/f1),()是開啟了一個子shell,不影響當前系統的umask值,還可以保留原目錄來執行

(cd /data; rm -rf /data/*) 執行完成之後路徑不切換

24.man bash 中可以查看()的使用說明,註意在bash中搜索$的時候需要轉義符號\

25.{ name=mage; echo $name; } 在當前shell環境中執行,註意空格和分號,()裏面的命令可以不使用空格,使用{}一定要有空格,如 { name=mge; echo $name }

26.x=1;echo $$;(echo $$;echo $x;x=2;echo $x);echo $x

27.多腳本傳遞參數,並打印第一個參數 $*,$@ 區別,只有在加""號時有區別

test2.sh

#!/bin/bash

echo "arg1 is $1"

test.sh

#!/bin/bash

echo "============================="

echo "arg1 is $1, all args is $*"

echo "============================="


echo "+++++++++++++++++++++++++++++"

/root/bin/test2.sh "$@"

echo "+++++++++++++++++++++++++++++"


# ./test.sh a b c

28.set -- 清空所有位置變量,腳本執行完成以後清空變量以便系統回收內存

29.為執行的腳本創建軟連接,可以通過$0判斷來執行不同的功能,系統中給出的示例: # ll /usr/sbin/pidof

30.vim 編輯器使用 V 來復制行,Ctrl + v 來復制列

31.shift 左移位置參數, shift num 可以指定左移多少位

32.腳本的執行是否成功由最後一條命令來決定的,如果是語法錯誤,後續的命令無法執行,即便正確也是返回非0

33.exit 可以指定退出碼,使用echo $? 查看返回

34.執行的shell腳本是在子進程中執行的,可以使用pstree來查看

35.let z=x+y(let z=$x+$y),$[],declare -i算數運算中裏面的變量可以不用加$

36.COLOR=$[RANDOM%7+31] ;color 顏色字體補充

37.expr 是命令 expr 1+2 錯誤,正確 expr 1 + 2, expr 3 \* 2 乘法符號需要使用\轉義

38.a=$[a^b]; b=$[a^b];a=$[a^b]; echo $a $b a、b互換

39.help test 可以查看條件判斷的種類,也是[ ] 的幫助說明,因為test 和[] 是等價的

40.[]中的變量建議使用"" 引用,防止一個變量為空另一個變量非空導致報錯

41.[ $# -ne 2 ] && echo "******" && exit 1 最後一個&& 說明

42.=~ 使用擴展的表達式 並且使用[[]], !取非 [[ $filename =~ .+\.sh ]]

43.-w 判斷權限看的是實際權限不是文件的權限設置,針對與root的(ll 查看的) [ -w /etc/shadow ]

44.使用()或者{}在比較中可以改變優先級 false ||{ cmd1; cmd2; },() 開啟 了一個子shell,{}不開啟子shell,退出腳本本身要使用{}

45.[ ! $# -eq 2 ] 註意!的位置

46.腳本中只有在使用正則表達式的時候,使用[[]] 來做判斷

47.linux操作系統退格鍵不好用,可以安裝下readline庫# yum install readline-devel.*

48.ls -d 選項查看當前目錄的所有文件時不會遞歸目錄下面的子文件夾,如: ls -d /etc/*/ 顯示/etc 下面所有的文件夾,ls -d /etc/* 顯示目錄下面所有的文件夾和文件

49.ls 中的A選項排除.和..可以結合grep來搜索出當前目錄下的子目錄或是文件有多少(包括隱藏文件),如: ls -Al /etc/ |grep '^d'|wc -l

50.df -i 查看磁盤分區的inode利用率

51.if [[ $key =~ [Yy][Ee][Ss] ]] 註意在使用正則表達式的時候不要使用雙引號如 $key =~ "[Yy][Ee][Ss]",這種會報錯

52.掃描當前新添加的磁盤並識別: echo '- - -' >/sys/class/scsi_host/host0/scan

53.-a File(-e File): 存在性測試,存在為真,否則為假

53.-h File(-L File): 存在且為符號鏈接文件

54.-s File: 是否存在且非空

55.vi 編輯器可以將指定的行保存至另外一個文件 :3,8w /root/test1111, 將指定的第三行至第8行保存至文件test1111中

也可以讀入命令輸出, :r ls 將ls的輸出輸出至當前vi打開的編輯器中,使用:r /etc/fstab 讀入/etc/fstab 中的文件內容至當前的編輯器中

56.vim編輯器中ctrl + d向屏幕的尾部翻半屏 ctrl + u 向屏幕的首部翻半屏

57.vim編輯器中使用D選項刪除光標位置至行尾


學習筆記(7)