第一部分shell編程1基礎知識


ls etc/init.d/ shell腳本的路徑linux

ls /usr/local/apache2/
ls /usr/local/apache2/bin/apachectlshell


1. shell特性
命令歷史 history !! !$ !n !字符
Tab 鍵能夠補全文件路徑或者命令
alias a=「b」 unalias a
通配符 *匹配零個或多個字符 ?匹配一個字符
輸入輸出重定向 >, >>, < 反向重定向, 2>, 2>> 錯誤重定向
管道符 |
做業控制 ctrl+z, jobs查看後臺中止的命令, fg 恢復後臺中止的命令, bg n n表示查看後臺第幾個運行的命令apache

sleep 100 & 放到後臺執行vim


ls aming >1.log 2>err.log = ls aming >1.log 2>&1bash

mail -s "adhofdjf" 947370895@qq.com < /etc/passwd
wc -l < /etc/passwd
39less

cat 1.log | wc -ltcp


2. 變量spa

系統變量名都是大寫,echo 能夠查看變量名
env 能夠列出當前用戶的全部環境變量以及用戶自定義全局變量
set命令能夠把全部變量列出來包括系統的和自定義的全局變量以及當前shell自定義變量
linux下設置自定義變量規則: (1)格式爲 「a=b」, 其中a爲變量名,b爲變量的內容,等號兩邊不能有空格;(2)變量名只能由英、數字以及下劃線組成,並且不能以數字開頭;(3)當變量內容帶有特殊字符(如空格)時,須要加上單引號;(4)若是變量內容中須要用到其餘命令運行結果則可使用反引號;(5)變量內容能夠累加其餘變量的內容,須要加雙引號;排序

系統全部用戶使用變量: export myname=Aming 全局變量,加入/etc/profile並source /etc/profile永久生效
系統某個用戶使用變量: export myname=Aming 加入當前用戶家目錄下的 .bashrc中 source .bashrc
export myname=Aming 全局變量,export 不加任何選項表示,聲明全部的環境變量以及用戶自定義變量
用戶自定義變量,可使用 unset 變量名 進行解除變量設置文檔

a=1
echo $a

unset a 把a的值抹掉


echo $HOME
echo $LANG

filename=/etc/passwd
echo $filename

com='ls /root'
echo $com

rpm -qf `which vim` 符號表明引用命令裏面的結果


[root@localhost /]# a=1
[root@localhost /]# b=$a:123
[root@localhost /]# echo $b
1:123

 


3. 系統和我的環境變量的配置文件
/etc/profile PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等
/etc/bashrc $PS1 umask 之後若是設置umask修改 /etc/profile 不要改這個文件
.bash_profile 用戶本身的環境變量
.bashrc 當用戶登陸時以及每次打開新的shell時, 執行該文件
.bash_history 記錄命令歷史用的
.bash_logout :當退出shell時,會執行該文件。


[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# 輸出的就是這裏的意思


PS1=「[\u@\h \W \t]\\$」增長一個時間


全局配置

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

 

4. shell中的特殊符號
* 匹配符號,零個或多個任意字符
? 匹配符號,1個任意的字符
# 注視說明用的,使後面的內容失去本來的意義
\ 脫義字符,將特殊字符還原爲普通字符
|將符號前面命令的結果丟給符號後面的命令,通常針對文檔操做的命令比較經常使用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等

$ 引用變量,還有 !$
; 分號,多條命令寫一行時,分隔命令
~ 用戶家目錄
& 放到命令最後面,讓命令在後臺運行
>, >>, 2>, 2>> [錯誤]重定向,追加[錯誤]重定向
[ ] 中括號,中間爲字符組合,表明中間字符中的任意一個 ls 1[23a].txt

 


5. 經常使用命令:
1)cut
語法: cut -d ‘分隔字符’ [-cf] n 這裏的n是正整數
-d 後面指定分隔符,用單引號引發來,-f 指定第幾段 cut -d ':' -f 1 /etc/passwd |head -n 5.
cut -d : -f1 /etc/passwd |head -n 5
-c 後面只有一個數字表示截取第幾個字符head -n2 /etc/passwd|cut -c2
-c 後面跟一個數字區域,表示截取從幾到幾head -n2 /etc/passwd|cut -c2-5

[root@localhost ~]# head /etc/passwd |cut -d : -f3
0
1
2
3
4
5
6
7
8
10


[root@localhost ~]# head /etc/passwd|cut -c2
o
i
a
d
p
y
h
a
a
u

 

cut和sort結合使用

2)sort
語法: sort [-t 分隔符] [-kn1,n2] [-nru] (n1<n2)
不加選項,從首字符向後,依次按ASCII碼值進行升序排序sort /etc/passwd
-n 從小到大排序,使用純數字排序
-t 後指定分隔符,-kn1,n2表示在指定的區間中排序,-k後面只跟一個數字表示對第n個字符排序
sort -t: -k3 -n /etc/passwd
-r 表示以降序的形式排序 sort -t: -k3,5 -r /etc/passwd k表示期間
-u 去重 cut -d: -f4 /etc/passwd |sort -n -u

 

[root@localhost ~]# cut -d: -f3 /etc/passwd |sort -n
0
1
2
3
4
5
6
7
8
10
11
12
13
14
69
74
81
89
99
499

sort -n -u 1.txt |xargs

3)wc
用於統計文檔的行數、字符數、詞數
不加任何選項,會顯示行數、詞數以及字符數
-l 統計行數
-m 統計字符數
-w 統計詞數

4)uniq
uniq 去重複,最經常使用就一個 -c 用來統計重複的行數,去重前要先排序sort testb.txt |uniq -c

uniq 1.txt |wc -l

sort -n 1.txt |uniq 現有排序

sort -n 1.txt |uniq -c |sort -n 多個管道,c表明顯示重複的次數


5)tee
後跟文件名,相似於>,比重定向多了一個功能,在把文件寫入後面所跟的文件中的同時,還顯示在屏幕上
|tee ==> + screen

tcpdump -nn 抓包的
tcpdump -nn > 2.log

wc -l 2.log

tcpdump -nn |tee 2.log 不但在屏幕上顯示,還定向到2.log裏面了,動態的

 

6)tr 用來替換字符
最經常使用的就是大小寫轉換: head -2 /etc/passwd |tr '[a-z]' '[A-Z]'
tr 替換一個字符也是能夠的 grep 'root' /etc/passwd |tr 'r' 'R'

7)split 切割大文件用的
-b : 按大小來分割單位爲byte split -b50 1.txt
默認會以xaa, xab, …這樣的形式定義分隔後的文件名,也能夠指定文件名 split -b50 1.txt 123
-l : 按行數分隔,split -l10 file

[root@localhost ~]#split -b5 1.txt
[root@localhost ~]# ls
1.txt install.log xaa xac xae
anaconda-ks.cfg install.log.syslog xab xad xaf
[root@localhost ~]# du -sb x*
5 xaa
5 xab
5 xac
5 xad
5 xae
3 xaf

rm -rf x*

 

6. && 和 ||
command1 ; command2 前面命令是否執行完成都會執行後面命令
command1 && command2 只有前面命令執行成功纔會執行後面命令
command1 || command2 只有前面命令不成功再去執行後面命令

相關文章
相關標籤/搜索