Linux達(dá)人養(yǎng)成計(jì)劃

實(shí)用

grep -RiP ./ "something"在當(dāng)前的所有目錄中查找有something字眼的文件,可以配合less使用。

ls

ls [選項(xiàng)] [文件或目錄]

選項(xiàng):

  • -a:顯示所有文件,包括隱藏文件
  • -l:顯示所有詳細(xì)信息
  • -d:查看目錄屬性,如ls -ld /etc可以直接查看etc目錄的屬性
  • -h:人性化顯示文件大小,一般與-l協(xié)同使用
  • -i:顯示inode,每個(gè)文件都有一個(gè)節(jié)點(diǎn)號,就是inode.

通常使用ls -l比較多,但是ls -l有個(gè)別名:ll所以如果需要使用ls -l,只要敲ll就可以了。
通過ls - l可以獲取詳細(xì)信息,其中第一列表示文件權(quán)限,第二列表示當(dāng)前文件引用次數(shù),第三列表示文件的所有者,第四列表示文件的所屬組。

目錄處理命令

mkdir [-p] [目錄名]

  • -p 遞歸創(chuàng)建

創(chuàng)建一個(gè)目錄不需要使用-p參數(shù),但是如果創(chuàng)建多級目錄,并且每級目錄都不存在,需要使用-p參數(shù)。如mkdir -p qxg/qqxg

rmdir [目錄名]

用于刪除空白目錄,如果目錄中有內(nèi)容,則無法刪除。通常刪除目錄使用的命令是rm

rm [選項(xiàng)] [目錄]

  • r 刪除目錄
  • f 強(qiáng)制刪除,不會進(jìn)行交互詢問是否刪除

比如 rm -rf /會刪除linux根目錄下的所有文件。rm -rf /tmp/是刪除/tmp這個(gè)目錄,而rm -rf /tmp/*是刪除/tmp目錄下的所有目錄。
通常不論刪除目錄還是文件,都會使用rm -rf這種習(xí)慣用法。

cp [選項(xiàng)] [原文件或目錄] [目標(biāo)目錄]

  • -r 復(fù)制目錄
  • -p 連帶文件屬性復(fù)制
  • -d 若源文件是鏈接文件,則復(fù)制鏈接屬性
  • -a 相當(dāng)于 -pdr。如果想要復(fù)制的文件或目錄和原來的一模一樣,只要加上-a命令就ok了。

該命令可以復(fù)制文件也可以復(fù)制目錄。

常見目錄

  • / 根目錄
  • /bin 存放必要的命令
  • /boot 存放內(nèi)核以及啟動所需的文件等
  • /dev 存放設(shè)備文件
  • /etc 存放系統(tǒng)的配置文件
  • /home 用戶文件的主目錄,用戶數(shù)據(jù)存放在其主目錄中
  • /lib 存放必要的運(yùn)行庫
  • /mnt 存放臨時(shí)的映射文件系統(tǒng),我們常把軟驅(qū)和光驅(qū)掛裝在這里的-
    floppy和cdrom子目錄下。
  • /proc 存放存儲進(jìn)程和系統(tǒng)信息
  • /root 超級用戶的主目錄
  • /sbin 存放系統(tǒng)管理程序
  • /tmp 存放臨時(shí)文件的目錄
  • /usr 包含了一般不需要修改的應(yīng)用程序,命令程序文件、程序庫、手冊和其它文檔。
  • /var 包含系統(tǒng)產(chǎn)生的經(jīng)常變化的文件

鏈接命令

ln -s [源文件] [目標(biāo)文件]

  • -s 創(chuàng)建軟連接

鏈接分為硬鏈接和軟鏈接。假設(shè)有一個(gè)文件/home/qxg/good,那么通過ln /home/qxg/good /tmp/bad創(chuàng)建該文件的硬鏈接,處于/tmp/下名為bad。那么在修改good文件的時(shí)候,bad文件也會跟著修改,但是刪除good的時(shí)候,bad依然存在,可以理解為硬鏈接就是java中的引用,其只是指向了文件的實(shí)際位置。
而軟鏈接就類似windows中的快捷方式,一般推薦使用軟鏈接的形式。
但是注意一點(diǎn),在創(chuàng)建鏈接的時(shí)候,源文件的路徑一定要寫絕對路徑。

文件搜索

locate

locate 文件名

locate的特點(diǎn)是搜索速度比較快,其在后臺數(shù)據(jù)庫中按文件名搜索,其中/var/lib/mlocate就是其所搜索的數(shù)據(jù)庫。但是如果創(chuàng)建一個(gè)新的文件的時(shí)候,不會被搜索到,因?yàn)閿?shù)據(jù)庫不是實(shí)時(shí)更新的。但是可以通過updatedb命令來強(qiáng)制進(jìn)行更新,然后再搜索就可以找到。
但是locate的弱點(diǎn)是只能搜索文件名。

locate搜索的規(guī)則是按照/etc/updatedb.conf配置文件進(jìn)行搜索

whereis和which

whereis 命令名

  • b 只查找可執(zhí)行文件
  • m 只查找?guī)椭募?/li>

搜索命令所在路徑以及幫助文檔所在位置。
如:whereis ls會打印出:

ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

類似這種樣式的命令還有很多,比如想要知道我是誰用whoami,想要知道命令是干什么用whatis.

which

同樣也是搜索命令的執(zhí)行文件,并且如果該命令有對應(yīng)的別名,也會被顯示出來。
如執(zhí)行which ls會打印:

alias ls='ls --color=auto'
        /bin/ls

可以看到ls其實(shí)是執(zhí)行的ls --color=auto,表示不同的文件以不同的顏色列出。

find

find [搜索范圍] [搜索條件]

find搜索的內(nèi)容會和名字一模一樣,如果想要模糊搜索,可以使用通配符,通配符有以下幾種:

  • * 匹配任意內(nèi)容
  • ? 匹配任意一個(gè)字符
  • [] 匹配任意一個(gè)括號以內(nèi)的字符

eg:

  • find / -name install.sh在根目錄搜索install.sh名字的文件。
  • find /root -iname install.sh不區(qū)分大小寫搜索
  • find /root -user root按照所有者搜索
  • find /root -nouser查找沒有所有者的文件
  • find /var/log/ -mtime +10查找10天前修改的文件,-10表示10天內(nèi),10表示10天當(dāng)天。-atime表示文件訪問,-ctime 表示修改文件屬性。
  • find . -size 25k 按照文件大小搜索,+25k表示大于25k的文件,-25k表示小于25k的文件。k表示千字節(jié),M表示兆字節(jié),注意k不能是大寫,M不能是小寫。
  • find . -inum 252342查找inode節(jié)點(diǎn)為252342的文件
    復(fù)雜eg:
  • find /etc -size +20k -a -size -50k其中-a 表示and ,左右兩個(gè)條件都要滿足,所以該命令表示查找大于20k小于50k的文件。當(dāng)然也有-o 表示or。
  • find /etc -size +20k -a -size -50k -exec ls -lh {} \; 查找大于20k且小于50k的文件,并且通過ls -lh顯示出來。其中-exec 命令 {} \;表示對搜索結(jié)果執(zhí)行操作。

grep

grep [選項(xiàng)] 字符串 文件名

  • -i 忽略大小寫
  • -v 排除指定字符串

在某文件中匹配符合條件的字符串,如grep "some" test.sh在test.sh中查找some字符串。

find 和 grep的區(qū)別是,find是在系統(tǒng)中搜索文件,grep是在文件中包含的字符串。find是通配符匹配,grep是正則表達(dá)式匹配。

用戶和組

一個(gè)用戶可以有多個(gè)用戶組,一個(gè)主組其他附組。

  • /etc/group保存的是用戶的組信息,其格式為 組名稱:組密碼占位符:組編號:組中用戶名列表其中1~499編號是用戶裝的軟件所使用
  • /etc/gshaow存儲當(dāng)前系統(tǒng)中用戶組的密碼信息,其格式為:組名稱:組密碼:組管理者:組中用戶名列表
  • /etc/passwd 存儲當(dāng)前系統(tǒng)中所有用戶的信息,其格式為:用戶名:密碼占位符:用戶編號:用戶組編號:用戶注釋信息:用戶主目錄:shell類型
  • /etc/shadow 存儲用戶密碼
    用戶組
  • groupadd 添加組
  • groupmod -n [修改后的組名] [修改前的組名]修改組名
  • groupmod -g [修改后的pid] 要修改的組名 修改組編號
  • groupadd -g 888 boss創(chuàng)建888編號的用戶組boss
  • groupdel刪除用戶組,刪除前,先刪除用戶組中的用戶
    用戶
  • useradd -g [用戶組] [用戶]將某一用戶添加到用戶組里
  • useradd -d /home/qxg qxg創(chuàng)建qxg的時(shí)候指定主目錄,默認(rèn)和名字一樣
  • 如果創(chuàng)建用戶沒有指定用戶組的時(shí)候,會默認(rèn)創(chuàng)建和用戶同名的用戶組
  • useradd -c [注釋] [用戶]給用戶添加注釋
  • usermod -l [新用戶名] [老用戶名]更改用戶名
  • usermod -g [目標(biāo)group] [user]將用戶修改到目標(biāo)用戶組
  • userdel [user]刪除用戶,不刪除目錄 userdel -r [user]刪除用戶并刪除主目錄
    其他
  • touch /etc/nologin 禁止除root用戶 登錄到系統(tǒng)中
  • passwd -l [user]鎖定某個(gè)用戶
  • passwd -u [user]解鎖某個(gè)用戶
  • passwd -d [user]用戶無密碼登錄
  • passwd [user] 修改用戶密碼

權(quán)限

使用ls -l列出來的文件信息,第一列的內(nèi)容就是權(quán)限內(nèi)容:-rw-r--r--.
其中第一位表示文件類型(- 文件,d 目錄, l 軟鏈接文件),后邊三位一組,每組分別表示文件所有者的權(quán)限,所屬組的權(quán)限,非所屬組的權(quán)限。完整的一組權(quán)限為rwx,r表示讀,w表示寫,x表示執(zhí)行。

shell

echo命令

echo [選項(xiàng)] [輸出內(nèi)容]

  • -e 支持反斜杠控制的字符轉(zhuǎn)換
    如 \a表示警告音,\b表示退格鍵,\r表示換行等等

還可以通過-e將輸出的內(nèi)容顯示出某種顏色。

第一個(gè)腳本

在shell中#號表示注釋,但是第一行的#!/bin/bash不能省略,表示linux的標(biāo)準(zhǔn)腳本。

比如創(chuàng)建一個(gè)腳本hello.sh:

#!/bin/bash
echo "lalala"

那么運(yùn)行腳本的方式有兩種:

  • chmod 755 hello.sh 賦予運(yùn)行權(quán)限,然后./hello.sh直接運(yùn)行
  • sh hello.sh運(yùn)行 或者bash hello.sh

bash基本功能

命令別名

  • alias 查看系統(tǒng)中所有命令的別名
  • alias 別名 = '原命令' 來創(chuàng)建別名。
  • 將別名寫入到~/.bashrc 中,則永久生效
  • unalias 別名 用來刪除別名

常用快捷鍵

  • ctrl + c 強(qiáng)制終止當(dāng)前命令
  • ctrl + l 清屏
  • ctrl + a 光標(biāo)移動到命令行首
  • ctrl + e 光標(biāo)移動到命令行尾
  • ctrl + u 從光標(biāo)所在位置刪除到行首
  • ctrl + z 把命令放入后臺
  • ctrl + r 在歷史命令中搜索
  • ctrl + d 表示退出(exit)
  • shift + PageUp顯示上一個(gè)屏幕內(nèi)容,使用clear后,可以使用這個(gè)命令查看

歷史命令

history [選項(xiàng)] [歷史命令保存文件]

  • -c 清空歷史命令
  • -w 把緩存中的歷史命令寫入歷史命令保存文件
  • !n 表示重復(fù)執(zhí)行第n條歷史命令
  • !! 重復(fù)執(zhí)行上一條命令
  • !字符串 重復(fù)執(zhí)行最后一次以這個(gè)字符串開頭的命令

重定向

輸出重定向

  • > 覆蓋
  • >> 追加
  • 2>標(biāo)準(zhǔn)錯(cuò)誤輸出
  • 2>> 標(biāo)準(zhǔn)錯(cuò)誤輸出 追加方式,左右沒空格
  • 命令 &> 文件,覆蓋方式把正確和錯(cuò)誤信息都重定向
  • 命令 &>>文件 不解釋
  • 命令>>文件1 2>>文件2

輸入重定向

  • wc < log.log

多命令

  • cmd1;cmd2 命令之劍沒有邏輯關(guān)系,但是cmd1執(zhí)行完后cmd2執(zhí)行
  • cmd1&&cmd2 命令1執(zhí)行完后,命令2才執(zhí)行,命令1執(zhí)行不正確命令2不執(zhí)行。
  • cmd1 || cmd2 命令1未正確執(zhí)行則命令2才執(zhí)行,命令1執(zhí)行正確,則命令2不執(zhí)行。
    ls &> /dev/null 命令操作后,顯示的內(nèi)容直接丟到垃圾桶里。

歷史命令默認(rèn)保存1000條,如果覺得不夠,可以到/etc/profile中修改HISTSIZE
歷史命令保存在~/.bash_history下

變量規(guī)則

  • 單引號中的專業(yè)字符均無用,雙引號中$有特殊含義
  • 賦值方式是aa=123
  • 而如果想要將命令結(jié)果賦給aa,可以使用() ,如 aa =(ls),將ls的結(jié)果賦給aa。
  • 變量賦值的時(shí)候左右不能加空格。
  • 調(diào)用變量需要在前邊加上$如有個(gè)變量x=5,調(diào)用x變量需要使用$x
  • 所有的變量都是字符串類型,比如x=5,那么$x是字符串,不能對其做加減等運(yùn)算。
  • 如果想要做加減運(yùn)算,需要使用$(()),如$(( 10 + 20 ))
  • x="$x"456/x=$(x)456都是變量疊加,將原來的x加上后綴456
  • set命令會查詢到當(dāng)前系統(tǒng)中所以的變量。set -u執(zhí)行后,那么echo $a當(dāng)a變量不存在就會顯$示錯(cuò)誤信息,而默認(rèn)情況是顯示空字符。
  • unset刪除變量,unset x不需要加上$,同樣也可以刪除環(huán)境變量
  • export 變量名=變量值,定義環(huán)境變量方式 eg:export x=5。
  • env查看環(huán)境變量
  • 建議將環(huán)境變量寫成大寫
  • PS1變量:用于定義命令行前邊那一串的格式,如ubuntu@localhost:/home/ubuntu #,具體怎么改,百度一下
  • locale用于顯示當(dāng)前語系變量,重要的是LANGLC_ALL,LANG是定義系統(tǒng)主語系的變量,LC_ALL定義整體語系變量。
  • locale -a會顯示當(dāng)前支持的所有語言環(huán)境。

位置參數(shù)變量

位置參數(shù)變量 作用
$n n為數(shù)字,0表示命令本身,1~9表示參數(shù)從第一個(gè)到第九個(gè),10個(gè)以上需要使用大括號`{10}`
$* 表示命令行中所有參數(shù)
$@ 命令行中所有參數(shù),不過區(qū)分對待,比如使用for n in $@的時(shí)候就會起作用
$# 參數(shù)個(gè)數(shù)

預(yù)定義變量

預(yù)定義變量 作用
$? 如果值為0,表示上一個(gè)命令執(zhí)行成功,其實(shí)多命令執(zhí)行就是根據(jù)這個(gè)來的
$$ 當(dāng)前進(jìn)程的進(jìn)程號pid
$! 后臺運(yùn)行的最后一個(gè)進(jìn)程的pid

輸入

read命令用于讀取間盤輸入,并且賦給某個(gè)變量

  • read -p "請輸入名字" name,-p表示輸出提示信息
  • read -p "請輸入名字" -t 30 name,-t表示30s后將會直接停止。
  • read -p "請輸入密碼" -s passwd,-s表示鍵盤輸入的內(nèi)容,命令行上不顯示
  • read -p "輸入[y/n]" -t 1 input-t表示只接受對應(yīng)個(gè)數(shù)的字符,接受完直接運(yùn)行。

shell運(yùn)算符

declare命令

聲明變量類型,如果不聲明變量類型,則默認(rèn)是字符串類型。

declare [+/-] [選項(xiàng)] 變量名

  • - :給變量設(shè)定類型屬性
  • + :取消變量類型屬性
  • -a:數(shù)組
  • -i:整數(shù)
  • -x:環(huán)境變量
  • -r:只讀變量
  • -p:顯示變量被聲明的類型

數(shù)值運(yùn)算方法

  • declare -i cc=$aa+$bb
  • cc=$(expr $aa + $bb)+號左右必須有空格
  • cc=$(($aa+$bb))
  • cc=$[$aa+$bb]

環(huán)境變量配置文件

系統(tǒng)主要生效的環(huán)境變量有:

  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

正常登錄:


image.png

非正常登錄:
/etc/bashrc -> /etc/profile.d/*.sh

其他配置文件

  • ~/.bash_logout 登出的時(shí)候環(huán)境變量會生效
  • ~/.bash_history 歷史命令的保存位置
  • /etc/issue 登錄前顯示的信息
  • /etc/issue.net 遠(yuǎn)程登錄前顯示信息
  • /etc/motd 登錄成功后顯示的信息,

正則

awk,grep,sed是支持正則的,而find,cp,ls等只能使用通配符。

Linux中的基礎(chǔ)正則:

字符 作用
* 0次或多次
. 除換行符的任意字符
^ 行首
$ 行尾
[] 括號內(nèi)任意字符
[^] 非括號內(nèi)任意字符
轉(zhuǎn)義,注意shell中的{}是特殊符號,用在正則中需要轉(zhuǎn)義
{n} 出現(xiàn)n次
{n,} 不小于n次
{n,m} n~m次

cut命令

cut命令用來進(jìn)行列提取,grep是行提取

cut [OPTIONS] 文件名

  • f 提取第幾列
  • d 分隔符,默認(rèn)使用制表符

但是這個(gè)命令的智商比較低,只能截取規(guī)律的文件,如果目標(biāo)文件的內(nèi)容是多個(gè)空格隔開的,那么cut就不能起作用了。這個(gè)時(shí)候就要使用awk命令。
eg:cut -f 2,4 student.txt

awk

awk中的輸出命令只認(rèn)識print或printf,沒有echo命令。

awk '條件1{動作1} 條件2{動作2}...' 文件名

  • 條件一般使用關(guān)系表達(dá)式作為條件
  • 動作一般是格式化輸出如print,或流程控制等。

比如有以下文件:

Name Age Location  
Mike 10  henan
Tok  20  hunan

使用awk如何輸出第1列和第3列,因?yàn)榉指舴强崭?,cut是沒法完成這個(gè)任務(wù),那么使用awk呢?
答案如下:awk '{printf $1 "\t" $3 "\n"}' student.txt或者awk '{print $1 "\t" $3}' student.txt.
awk是按行執(zhí)行命令,因?yàn)檫@個(gè)命令沒有條件,所以每行都要執(zhí)行,但是注意,其讀取完行,才開始執(zhí)行動作。而$1表示輸入的第一個(gè)參數(shù),所以可以按每行的輸入執(zhí)行對應(yīng)的輸出。

再說個(gè)問題:執(zhí)行df -h 后,找到磁盤使用量大于的20%的,如果有就報(bào)警,這個(gè)怎么做呢?
df -h|grep "/dev/sda5" | awk '{print $5}'|cut -d "%" -f 1

BEGIN,END

awk 'BEGIN{printf "This is a transcript\n"} {printf $2 "\t" $4 "\n"}' student.txt
BEGIN是一個(gè)表達(dá)式,表示在最開始的時(shí)候執(zhí)行后邊的動作。
而END是在最后的時(shí)候執(zhí)行后邊的動作。

那么這個(gè)東東又有什么用呢?
比如/etc/passwd中的文件,我想截取其中第一列的內(nèi)容,使用cut輕松完成cat /etc/passwd| cut -d ":" -f 1,那么使用awk的話,就需要借助于BEGIN:
ccat /etc/passwd | awk 'BEGIN{FS=":"} {printf $1"\n"}',FS=":"中的FS是內(nèi)置的一個(gè)變量,表示的是分隔符,在剛開始的時(shí)候就指定分隔符,這樣就可以輸出對應(yīng)的變量了。
而如果不加BEGIN:cat /etc/passwd | awk '{FS=":"} {printf $1"\n"}',那么執(zhí)行結(jié)果將是這樣的:

root:x:0:0:root:/root:/bin/bash
user1
user2

原因就是,讀取第一行后,先賦變量,然后才開始執(zhí)行動作,而這條命令是每行都會執(zhí)行,但是第一行執(zhí)行前,分隔符依然是:所以就導(dǎo)致了以上的結(jié)果出現(xiàn),解決辦法就是加上BEGIN

再看一個(gè)例子:
cat student.txt|grep -v Name | awk '$4>70{printf $2 "\n"}',表示大于70分的打印出名字。
注意grep -v Name表示取反,有Name的那一行不要.

sed

對數(shù)據(jù)進(jìn)行選取,替換,刪除 ,新增的命令

sed [OPTIONS] '[動作]' 文件名

  • -n:一般sed會把所有數(shù)據(jù)輸出到屏幕,而使用-n后,只會把經(jīng)過sed命令處理的行輸出到屏幕
  • -e: 允許輸入多條動作
  • -i: 一般sed不會修改文件,只會將結(jié)果顯示在屏幕,但是加上-i會修改文件。

動作:

  • a:追加,在某一行的后邊添加一行或多行

  • c:行替換,用c后面的字符串替換原數(shù)據(jù)行

  • i:插入,在某一行的前邊插入一行或多行。

  • d:刪除,刪除指定行

  • p:輸出指定行

  • s:字符替換,用一個(gè)字符串替換另外一個(gè)字符串,與vim中的替換類似行范圍s/新字符串/舊字符串/g

  • sed -n '2p' student.txt:查看當(dāng)前文件的第二行,注意一定加上-n,如果沒有-n將輸出所有行。

  • sed '2,4d' student.txt刪除第二行到第四行的數(shù)據(jù)

  • sed '2a something' student.txt:在第二行的后邊加入一行內(nèi)容

  • sed '2i something' student.txt:在第二行的前邊加入一行內(nèi)容

  • sed '4c something' student.txt:將第4行替換為something

  • sed '4s/70/100/g' student.txt將第四行的70替換為100,如果不加行數(shù),則會替換全文內(nèi)容。

  • sed -e 's/furong//g;s/fengjie//g' student.txt -e指定多條命令,命令之間使用;隔開。

sort

sort [選項(xiàng)] 文件名

  • -f : 忽略大小寫
  • -n:以數(shù)值形進(jìn)行排序,默認(rèn)使用字符串
  • -r:反向排序
  • -t:指定分隔符,默認(rèn)是制表符
  • -k n[,m] 按照指定的字段范圍排序,一般與-t結(jié)合使用,-t將每行分為多個(gè)字段,然后通過-k n,m來指定按照第某個(gè)字段排序。

wc

wc [選項(xiàng)] 文件名

  • -l:只統(tǒng)計(jì)行數(shù)
  • -w:只統(tǒng)計(jì)單詞數(shù)
  • -m:只統(tǒng)計(jì)字符數(shù)

默認(rèn)會都統(tǒng)計(jì)。

shell流程控制

條件判斷

文件類型判斷

以下都是判斷文件是否存在,但是對應(yīng)的文件類型有不同,格式是[選項(xiàng)] 文件名

  • -b 塊設(shè)備文件
  • -c 字符設(shè)備文件
  • -d 目錄文件
  • -e 單純判斷文件是否存在
  • -f 普通文件
  • -L 符號鏈接文件
  • p 管道文件
  • -s 非空文件
  • -S 套接字文件

用的最多的是 -d,-e,-f。
比如:
[ -e /root/install.log ]test -e /root/install.log表示判斷/root/install.log是否存在
以上寫法都對,但是一般用第一種寫法,但是第一種寫法中括號兩邊要有空格。
[ -e /root/install.log] && echo yese || echo no文件存在會打印yes,不存在打印no??梢詫?code>cmd&&cmd||cmd理解為if esle語句。

根據(jù)文件權(quán)限判斷

以下都是判斷文件是否存在,同時(shí)判斷文件是否有對應(yīng)的權(quán)限

  • -r 讀權(quán)限
  • -w 寫權(quán)限
  • -x 執(zhí)行權(quán)限

文件比較

  • 文件1 -nt 文件2 :判斷文件1的修改時(shí)間是否比文件2的新,nt: new than
  • 文件1 -ot 文件2 :old than
  • 文件1 -ef 文件2:判斷文件1是否和文件2的Inode號一致。

兩個(gè)整數(shù)之間的比較

格式是num1 [選項(xiàng)] num2

  • -eq :判斷兩個(gè)整數(shù)是否相等
  • -ne:不相等
  • -gt:大于
  • -lt:小于
  • -ge:大于等于
  • -le:小于等于

字符串之間的比較

  • -z 字符串 判斷字符串是否為空
  • -n 判斷字符串是否非空
  • 字符串 ==字符串2
  • 字符串 != 字符串2

但是判斷的時(shí)候要加上雙引號,否則會出錯(cuò),比如[ -z $name ]

多重條件判斷

  • 判斷1 -a 判斷2:邏輯與
  • 判斷1 -o 判斷2:邏輯或
  • !判斷:邏輯非

if

單分支if條件語句

if [ 條件判斷 ];then
  程序
fi

或者

if [ 條件判斷 ]
  then
  程序
fi 

雙分支if

if [ 條件判斷 ]
  then
    條件成立,執(zhí)行
  else
    條件不成立,執(zhí)行
fi

如,判斷讀取的字符串是不是一個(gè)目錄

#!/bin/bash

read -t  30 -p "input" dir
if [ -d $dir ]
  then
    echo "是目錄"
  else
    echo "不是"
fi

多分支if

if [ 條件1 ]
  then
    程序
elif [ 條件2 ]
  then
    程序
...
else
  程序
fi

tips

  • 在判斷字符相等時(shí)利用 == 判斷要注意兩邊都要有空格。
  • if [ -n "num1" -a -n "num2" -a -n "$op" ]
    shell編程類似的這種對于變量的判斷一定要記得加雙引號,雖然有時(shí)候顯得沒必要,但是在程序比較大時(shí)可能會因?yàn)檫@種小細(xì)節(jié)出錯(cuò),這種問題應(yīng)該調(diào)試半天也不一定能發(fā)現(xiàn).

case

case $變量名 in
  "值1")
    程序1
    ;;
  "值2")
    程序2
    ;;
  *)
    默認(rèn)程序
    ;;
esac

其中對于每個(gè)匹配的值,都可以使用正則來表示

for

for 變量 in 值1 值2 值3...
  do
    程序
  done

for i in 1 2 3 4 5
  do 
    echo $i
  done

另一種格式:

for (( i=1;i<=100;i++))
  do
    程序
  done

while

while [ 條件判斷 ]
  do
    程序
  done

until

until和while剛相反,until是條件成立才終止

until [ 條件判斷 ]
  do
    程序
  done
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,201評論 2 33
  • 課程介紹 《Linux達(dá)人養(yǎng)成計(jì)劃I》是慕課網(wǎng)上的一門Linux基礎(chǔ)入門課程,主要學(xué)習(xí)方向是服務(wù)器管理使用的基本命...
    古洞洞閱讀 824評論 0 11
  • linux 達(dá)人養(yǎng)成計(jì)劃1 1. mkdir 創(chuàng)建目錄 -p 遞歸創(chuàng)建 2. cd - 進(jìn)入上一次目錄 3. pw...
    銭兎孑閱讀 311評論 0 0
  • 小的時(shí)候,我是一個(gè)好孩子,伶牙俐齒的,樂天派,走東家串西家的孩子,我喜歡聊天,大人小孩都能說,我能說會道,聰明伶俐...
    林中均霑閱讀 441評論 0 2
  • 生涯死別在天涯,此恨何能以酒排? 自北及南花晚放,經(jīng)霜和雪淚深埋。 崇山解意生殊秀,弱柳從君感壯懷。 相映蓑衣門內(nèi)...
    白子殊閱讀 725評論 1 10

友情鏈接更多精彩內(nèi)容