shell基礎(chǔ)命令

bash語言

常用命令

1.head

  • 默認(rèn)取文件前10行內(nèi)容

2.tail

  • 默認(rèn)取文件末尾10行的內(nèi)容
    例:取文件8-14行的內(nèi)容
head -14 /etc/passwd | tail -7 

3.cut

  • 取出文本指定的列
  • 默認(rèn)以空格或者tab鍵進(jìn)行分割(不支持不規(guī)則的空格)
  • 選項(xiàng)
    • -d 指定分割符
    • -f 指定獲取的列號
      獲取第一列:
cut -f1 test.txt

獲取1和2列:

cut -f1,2 test.txt
cut -f1-2 test.txt

獲取第一列和第三列:

cut -f1,3 test.txt

為分割符獲取第一列:

cut -d":" -f1 test.txt

4.sort

  • 對文本的內(nèi)容進(jìn)行排序
  • 默認(rèn)以字符的ASCII碼數(shù)值從小到大排序
  • 選項(xiàng)
    • -n 以數(shù)值大小排序
    • -r 倒序
    • -t 指定分割符,默認(rèn)為空格
    • -knum 指定以某個(gè)字段來排序
  • 以數(shù)字大小排序
sort -n num.txt
  • 指定分割符為:且以第三列的數(shù)字大小排列:
sort -t":" -k3 -n /etc/passwd

指定分割符為:且以第三列的數(shù)字大小逆序(從大到小)排列:

sort -t":" -k3 -n -r /etc/passwd

5.uniq

  • 去重:必須有順序后才去重
sort -n num.txt | uniq
  • 選項(xiàng)
    • -d 僅打印有重復(fù)的元素
    • -c 打印元素重復(fù)的個(gè)數(shù)

6.wc(word count)

  • 計(jì)算文本數(shù)量
  • 選項(xiàng)
    • wc -l 打印行數(shù)
wc -l /etc/passwd
  • wc -w 打印單詞數(shù)
  • wc -c 打印字節(jié)數(shù)
  • wc -L 打印最長行的字節(jié)數(shù)

變量

變量定義

  • 方法一
    • 變量名=變量值
    • 變量值必須是一個(gè)整體,中間沒有特殊字符,等號兩側(cè)不能有空格
  • 方法二
    • 變量名='變量值'
    • 看到的內(nèi)容,就輸出什么內(nèi)容
  • 方法三
    • 變量名="變量值"
  • 方法四
  • 變量名=$(linux命令)
  • 變量名=$linux命令(反引號)
    以上四種方法默認(rèn)為本地變量
a=1
b=emilymei
c="hello world"
echo 123 #向屏幕輸出內(nèi)容
echo $a   #1
echo $b    #emilymei
echo $c  #hello world
d='hello from china'
echo $d  #hello from china
date_now=$(date)
echo $date_now  # 打印當(dāng)前時(shí)間
date_now2=`ls`
echo $date_now2. # 打印文件列表

單引號與雙引號的區(qū)別:

a=123
echo 'this is $a'  #this is $a  ,單引號時(shí),把 $a當(dāng)成普通字符串打印出來
echo "this is $a'"   #this is 123 ,使用雙引號時(shí),引用變量
echo $a #123
echo @a_1  #(空),認(rèn)為a_1是變量,shell中不存在的變量不會(huì)報(bào)錯(cuò)
echo ${a}_1  #123_1
echo $a _1  #123 _1

預(yù)定義變量(全局變量)

env:查看環(huán)境變量(只顯示全局變量)

  • 定義全局變量
    • 方法一
變量=值
export 變量
  • 方法二(最常用)
export 變量=值

全局變量只能在當(dāng)前打開的終端中生效,關(guān)閉后不再生效,需將環(huán)境變量放到~/.bashrc、~/.bash_profile/etc/profile文件中去,才能永久生效,這三個(gè)文件都是打開終端就會(huì)執(zhí)行的文件。其他文件中的都是臨時(shí)全局變量。

echo $PWD #相當(dāng)于pwd,返回的是當(dāng)前的家目錄
echo $USER  #返回當(dāng)前用戶名
echo $HOME  #返回當(dāng)前用戶的家目錄,相當(dāng)于echo ~
echo $PATH  #返回當(dāng)前的環(huán)境變量
ls  #顯示當(dāng)前目錄的文件
a=ls ;echo $a   #ls
a=`ls`;echo $a  #顯示當(dāng)前目錄的文件,反引號(``)里的內(nèi)容會(huì)被當(dāng)做命令來執(zhí)行
which python  #查找Python的安裝地址,只能在當(dāng)前環(huán)境變量里找
export PATH=$PATH:$PWD   #將當(dāng)前目錄加到環(huán)境變量里去
ll  #ls -l的簡寫
chmod +x 1.sh  #1.sh文件添加可執(zhí)行權(quán)限

內(nèi)置變量

符號 含義
$0 獲取當(dāng)前執(zhí)行的shell腳本文件名,包括腳本路徑
$n 獲取當(dāng)前執(zhí)行的shell腳本的第n個(gè)參數(shù)值,n=1..9,如果n大于9就要用大括號括起來${10}
$# 獲取當(dāng)前shell命令行中參數(shù)的總個(gè)數(shù)
$? 獲取執(zhí)行上一個(gè)指令的返回值(0為成功,非0為失?。?/td>
$@ 獲取當(dāng)前執(zhí)行的shell腳本的所有參數(shù)
$# 獲取當(dāng)前執(zhí)行的shell腳本的參數(shù)總數(shù)

數(shù)組變量

a=1
b=2
c=3
array=(1 2 3 4 5)
echo $array  #1,錯(cuò)誤
echo ${array[@]} #1 2 3 4 5
echo ${array[*]}  #1 2 3 4 5
echo ${#array[@]}   #5,代表這個(gè)數(shù)組里有5個(gè)元素
echo ${#array[*]}   #5,代表這個(gè)數(shù)組里有5個(gè)元素
echo ${array[2]}   #3,取數(shù)組第3個(gè)元素
echo ${array[-1]}   #3,取數(shù)組最后1個(gè)元素
array=(`ls`)  #數(shù)組的表現(xiàn)形式是(),這個(gè)是數(shù)組
echo ${array[@]}   #執(zhí)行l(wèi)s命令
array=`ls`  #這個(gè)是字符串,因?yàn)闆]有()
#@和*的區(qū)別,*:當(dāng)加上雙引號時(shí),會(huì)當(dāng)成字符串來處理,不加雙引號,當(dāng)初數(shù)組處理@:不管加不加雙引號,依然當(dāng)做數(shù)組處理,例:
array=(1 2 3);for line in "${array[@]}";do echo $line;done   
#1
#2   
#3
array=(1 2 3);for line in "${array[*}";do echo $line;done     #1 2 3,把a(bǔ)rray當(dāng)成字符串處理
array=(1 2 3);for line in ${array[@]};do echo $line;done   
#1
#2
#3
array=(1 2 3);for line in ${array[*]};do echo $line;done
#1
#2
#3

特殊符號的引用

  • 雙引號用于括起一段字符串,支持$var形式的變量替換
  • 單引號也表示其內(nèi)容是字符串值,不支持轉(zhuǎn)義
  • \反斜杠,某些情況下表示轉(zhuǎn)義
  • $(ls)表示執(zhí)行l(wèi)s后的結(jié)果。與``類似。不過可以嵌套
  • `反引號。用法比較獨(dú)特,代表命令的輸出,非常有用
  • (())對變量進(jìn)行操作,比如相加((a+b))$((2+3))
  • (())是證書擴(kuò)展。把里面的變量當(dāng)做整數(shù)去處理
  • ({1..1010})等價(jià)于 seq 1 10 。表示1到10
echo "a\nbb"  #a\nbb,沒有達(dá)到轉(zhuǎn)義效果,錯(cuò)誤
echo -e "a\nbb"    #-e,開啟轉(zhuǎn)義模式
#a
#bb
echo "a\bb"   #a\bb,\b=刪除前一個(gè)字符
echo -e "a\bb"   #b
echo -e "a\abb"  #abb,\a=發(fā)出警告的聲音
a=2;b=3
echo $((a+b))  #5,(())進(jìn)行兩個(gè)變量間的操作
a=5;b=7;c=2
echo $((a+b*c))  #19
echo $(($a+$b*$c))  #19
a=1;b=3
(($a>$b));echo $?   #1,非0的返回表示結(jié)果為false,0表示true
array=(`seq 1 15`)  #1到15的整數(shù)
echo ${array[@]}   #1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

變量類型

  • 字符串
  • 數(shù)字
  • 布爾
  • 數(shù)組 array=(a b c )
  • 函數(shù) foo(){echo hello world}
a="hello world"   #引號引起來的都是字符串
b=1;c=2   #整型
a=true;echo $a   #true  ,布爾

數(shù)字型變量操作

  • 計(jì)算:i=1;echo $i ;echo $((i+1))
  • 更新: ((i=i+1));echo $i
  • 只能進(jìn)行整數(shù)計(jì)算
  • 浮點(diǎn)數(shù)計(jì)算請使用awk 'BEGIN{print 1/3}'
  • 格式化顯示可以使用 awk 'BEGIN{printf("%.2f\n",1/3)}'
  • printf 格式化
  • BEGIN :為了讀取管道或者輸入的數(shù)據(jù)
a=1
echo $((a+1))   #2
((a=a+1))   #自增
echo $a  #2
i=1;((i=i+1));echo $i   #2
a=1 
((a++));echo $a   #2
awk 'BEGIN{print 2/3}'   #0.666667
awk 'BEGIN{printf "%.2f\n",1/3}'   #0.33,格式化為保留兩個(gè)小數(shù)點(diǎn)

字符串操作

  • # 表示掐頭
  • % 表示去尾
  • / 表示替換
  • # 與## 、%與%% 、/與//的區(qū)別 :最短匹配模式與最長匹配模式
  • awk可以代替這些操作
s="hello world";echo $s   #hello world
echo ${s:6}    #world,從第6項(xiàng)開始,打印后面的字符
echo ${s:6:3}   #wor  ,只打印從第6項(xiàng)開始之后3個(gè)內(nèi)容
echo ${#s}     #11,字符串的長度
echo ${s#hello}   #world,掐頭,去掉hello內(nèi)容,默認(rèn)空格去掉
echo "${s#hello}"   # world,掐頭,去掉hello內(nèi)容,空格不去掉
echo ${s#*o}  #*表示任意字符, world
echo ${s##*o}  #rld,表示去掉最后一個(gè)o前的所有內(nèi)容
echo ${s%world}   #hello ,去尾
echo ${s%%o}   #hell
echo ${s/world/emily}   #hello emily   ,world替換為emily

布爾變量

  • 命令執(zhí)行返回值 $?
  • 任何命令執(zhí)行都會(huì)有一個(gè)返回值
  • 0表示正確
  • 非0表示錯(cuò)誤
a=true;echo $?   #0
b=false;echo $?   #0,$?返回的是前一條命令是否正確執(zhí)行

算術(shù)判斷

  • [ 2 -eq 2 ] 相等
  • [ 2 -ne 2 ] 不等
  • [ 3 -gt 1] 大于
  • [ 3 -ge 3 ] 大于等于
  • [ 3 -lt 4 ] 小于
  • [ 3 -le 3 ] 小于等于
  • (())也可以表示算術(shù)比較。((10>=8)).((10==10)).
[ 3 -eq 2 ];echo $?    #1
echo $?   #0
((3>2));echo $?   #0

字符串比較

  • [ string1 = string2 ]如果兩字符串相同,則結(jié)果為真
  • [ string1 != string2 ]如果兩字符串不相同,則結(jié)果為真
  • [ -n string1 ]如果字符串不是空,則結(jié)果為真
  • [ -z string1 ]如果字符串是空,則結(jié)果為真
  • [[ "xxxx" == x* ]] 在表達(dá)式中表示0個(gè)或多個(gè)字符
  • [[ "xxxx" == x?? ]] 在表達(dá)式中表示單個(gè)字符
  • 在引用變量的時(shí)候要記得加雙引號[ -z "$a" ]否則當(dāng)a未定義時(shí)會(huì)語法報(bào)錯(cuò)
aaa=wwef
bbb=fdgggdh
["@{aaa}" == "${bbb}"];echo $?

邏輯判斷

[ 2 -ge 1 -a 3 -ge 4 ];echo $?  # 與
[ 2 -ge 1 -o 3 -ge 4 ];echo $?  #或
[ 2 -ge 1 && 3 -ge 4 ];echo $?  # 與
[ 2 -ge 1 || 3 -ge 4 ];echo $? # 或
[ ! 2 -ge 1 ];echo $? #非 
username="snow"
["${username}" == "snow"] && echo "成功" || echo "失敗"  # 如果等于snow就輸出成功
# ,否則輸出失敗
passwd=123
["${username}" == "snow"  -a "${passwd}" == 123 ]&& echo "成功" || echo "失敗"  
# 如果username等于snow并且passwd等于123就輸出成功,否則就輸出失敗

內(nèi)置判斷

  • -e file 如果文件存在,則結(jié)果為真
  • -d file 如果文件是一個(gè)子目錄,則結(jié)果為真
  • -f file 如果文件是一個(gè)普通文件,則結(jié)果為真
  • -r file 如果文件可讀,則結(jié)果為真
  • -s file 如果文件的長度不為0,則結(jié)果為真
  • -w file 如果文件可寫,則結(jié)果為真
  • -x file 如果文件可執(zhí)行,則結(jié)果為真
[-x test.sh];echo $?  # 文件是否可執(zhí)行
  • [[]]是[]的擴(kuò)展語法,在老的sh里并不支持,推薦用[]

shell腳本格式

1.格式要求

  • 在文件首行指定執(zhí)行shell的程序及相關(guān)說明
#!/bin/bash
# Author: Mei
# Date: 2021-12-07
  • shell腳本文件后綴,建議命令為.sh
  • 腳本執(zhí)行失敗時(shí),使用exit返回非零值,來退出程序
  • 默認(rèn)縮緊4個(gè)空格
  • shell腳本的命名簡單、有意義

2.注釋

  • 單行注釋
    • #
  • 多行注釋
 :<<!
這是注釋
中間都是注釋 
!

邏輯控制

  • 條件 if
  • 分支case
  • 循環(huán) for while until select
  • && ||
  • break和continue
    if結(jié)構(gòu)
  • if [ condition ] ;then ```;fi
  • if [ condition ] ;then ```;else ...;fi
  • if [ condition ] ;then ```;elif ...;fi
  • 簡單的邏輯可以使用 && ||去替代
  • 條件可以用命令返回值代替
if [ -e test ];then echo exist;else echo not exist;fi    
if ls test;then echo exist;else echo not exist;fi
ls test && echo exist ||echo not exist
[ -e test ] $$ echo exist || echo not exist   #不是完全等價(jià)于if else
echo "1" && echo "2" || echo "3" && echo "4" || echo "5" && echo "6" && echo "7" && echo "8" ||echo "9"   #1\n2\n4\n7\n8
read -e -p "請輸入路徑(如:/etc/passwd):"
if [ -f ${REPLY} ]
then 
        echo "${REPLY}是常規(guī)文件"
elif [ -d ${REPLY} ]
then
        echo "${REPLY}是目錄"
else
        echo "${REPLY}是其他文件"
fi

查詢某個(gè)應(yīng)用是否啟動(dòng):(例)

if netsta -tiup | grep "3306" &> /dev/nell; then
        echo "已啟動(dòng)"
else 
        echo "未啟動(dòng)" 
fi

control+r:可搜索
less ~./bash_history:查看歷史命令

for循環(huán)

  • for(( c1;c2;c3 ));
  • do
  • ...;
  • done
  • for ((i=0;i<10;i++));do echo $i;done
for ((i=0;i<10;i++));do echo $i ;done  #0\n1\n2\n3\n4\n5\n6\n7\n8\n9
array=(1 2 3 4 5)
for ((i=0;i<${array[@]};i++));do echo $i;done  #語法報(bào)錯(cuò),變量不能和數(shù)組作比較
for ((i=0;i<${#array[@]};i++));do echo ${array[i]};done   #1\n2\n3\n4\n5

for遍歷循環(huán)

  • 用于遞歸數(shù)組,還可以遞歸以空格隔開的字符串序列。或者某個(gè)命令的返回值

  • for f in $array[*];

  • do

  • ...

  • done

  • ss="aa bb cc dd";for x in ss;do echox;done

  • for x in ls;do echo $x;done

  • ss=(aa bb cc "sss dd");for x in {ss[@]};do echox;done

ss="aa bb cc dd";for x in $ss;do echo $x;done
for x in `ls`;do echo $x;done
ss=(aa bb cc "sss dd");for x in ${ss[@]};do echo $x;done
#若文件名中有空格,則不能使用`ls`,若使用:(文件名為2 3)
for x in `ls`;do echo $x;done    #2\n3
#此時(shí)用:
for x in *;do echo $x;done  #2 3
touch "2 3"  #新建文件2 3
rm "2 3"  #刪除文件2 3 
rm -rf   #刪除目錄下的所有文件,慎用
dir=$(ls /)
index=1
for f in $dir
do
        echo "${index}.${f}"
        index=$((index+1))
done

批量創(chuàng)建用戶:

for u in ${cat ~/users.txt}; do
        useradd "$u"
        echo "$u:123456" | chpasswd&>/dev/nell && echo "創(chuàng)建$u成功" || echo "創(chuàng)建$u失敗"
        passwd -e "$u"
done

while循環(huán)

  • i=0;while [ $i -lt 3 ] ;do echo $i;((i=i+1));done
  • 一個(gè)有用的小技巧。一行行的讀取文件內(nèi)容:while read line;do echo $line;done < 2
  • 如果while數(shù)據(jù)源來自文件,done<文件名,重定向到while中去
while read hostname ip;do
        ping -c1 -W1 "$ip" &> /dev/null
        if [ $? -eq 0 ];then
                echo "主機(jī)【${hostname}】在線"
        else
                echo "主機(jī)【${hostname}】離線"
        fi
done < ~/servers.txt
i=0
while [ $i -lt 3 ] ;do echo $i;((i=i+1));done  #0\n1\n2
while read line;do echo $line;done < 2   #讀取文件2中每一行內(nèi)容到屏幕
read x  #(輸入 )1111  ,相當(dāng)于input,讀取一個(gè)標(biāo)準(zhǔn)輸入
 echo $x   #1111
read -p "enter:" x;echo 我剛剛輸入了: $x   #enter:(輸入)111    我剛剛輸入了:111
echo $x   #111

case

function menu
{
             echo -e "\t\txxx管理系統(tǒng)"
             echo
             echo -e "\t\t1.備份"
             echo -e "\t\t2.顯示"
             echo -e "\t\t3.重啟"
             echo -e "\t\t4.還原"
             echo -e "\t\t0.退出"

}
function main
{

        while true;do
                clear
                menu
                read -s -e -n1
                echo 
                case "${REPLY}" in
                            "1") 
                                                echo "執(zhí)行備份操作"   
                                                ;;
                            "2") 
                                                echo "執(zhí)行顯示操作"  
                                                ;;
                            "3") 
                                                echo "執(zhí)行重啟操作" 
                                                ;;
                            "4") 
                                                echo "執(zhí)行還原操作" 
                                                ;;
                            "0") 
                                                echo "執(zhí)行退出操作"
                                                 break 
                                                ;;
                             *) 
                                                echo "其他操作" 
                                                ;;
                  esac
                  read   
          done
}

退出控制

  • return 函數(shù)返回
  • exit 腳本退出
  • break 退出當(dāng)前循環(huán)。默認(rèn)為1
  • break 2 退出兩層循環(huán)
  • continue 跳過當(dāng)前循環(huán),進(jìn)入下一次循環(huán)
  • continue 2 跳到上層循環(huán)的下一次循環(huán)中
for f in *;do echo $f;if [ -d f ];then break;fi;done
for f in *;do echo $f;if [ -f f ];then echo $f is a file ;else continue;fi;done  #結(jié)束當(dāng)前循環(huán),并且進(jìn)入下次循環(huán)

函數(shù)

1.格式

# 格式一:
函數(shù)名()
{
        命令1
        命令2
        ···
}
# 格式二:
function 函數(shù)名
{
        命令1
        命令2
        ···
}
# 方法一
show_info()
{
    echo -e "Hello,${USER},date:$(date)"
}
# 使用函數(shù)名即可調(diào)用
show_info

# 方法二
function show_info1
{
    echo -e "Hello,${USER},date:$(date)"
}
show_info1

2.參數(shù)

function check_host
{
    ip="$1"
    hostname = "$2"
    ping -c1 "&{ip}" &> /dev/null
    [ $? -eq 0 ] && echo -e "主機(jī)【&{hostname}】在線" || echo -e "主機(jī)【&{hostname}】離線"
}
# check_host 114.114.114.114 應(yīng)用服務(wù)器1
check_host $1 $2 # 外部執(zhí)行時(shí)傳參

shell運(yùn)行環(huán)境概念

  • bash是一個(gè)進(jìn)程,bash下還可以重新啟動(dòng)一個(gè)shell,這個(gè)shell是sub shell,原shell會(huì)復(fù)制自身給他
  • 在sub shell中定義的變量,會(huì)隨著sub shell的消亡而消失
  • ()在子shell中運(yùn)行
  • {}在當(dāng)前shell中運(yùn)行
  • $$ 當(dāng)前腳本執(zhí)行的pid
  • & 后臺(tái)執(zhí)行
  • $! 運(yùn)行在后臺(tái)的最后一個(gè)作業(yè)的pid
echo $$   #查看當(dāng)前shell的進(jìn)程號
(a=1)   #()內(nèi)的是子shell
echo $a   #返回為空,子shell運(yùn)行完會(huì)消失
a=3
(a=1;echo $a );echo $a  #1\n3
{a=1;echo $a ;};echo $a  #1\n1
for ((i=0;i<10;i++));do echo $i ;sleep 2;done  #平均每2秒打印一次i
for ((i=0;i<10;i++));do echo $i ;done &   #平均每2秒打印一次i并且放在后臺(tái)執(zhí)行
jobs     # 查看執(zhí)行任務(wù)的運(yùn)行狀態(tài)
Ctrl z  #把當(dāng)前任務(wù)切換到后臺(tái)執(zhí)行
bg 1   #把后臺(tái)的命令繼續(xù)執(zhí)行,1指命令標(biāo)記
fg 1   #把1任務(wù)放到前臺(tái)執(zhí)行

shell環(huán)境變量

  • shell首先是一個(gè)工作環(huán)境,有很多變量可以供我們使用
  • set 可以獲得當(dāng)前的所有變量
  • env 可以獲得可以傳遞給子進(jìn)程的變量
  • export aa==bbbb 把私有變量導(dǎo)出
echo $PATH   #查看環(huán)境變量
export PATH:`pwd`    #把當(dāng)前目錄加到環(huán)境變量里
vim .bashrc  里面加上  export PATH=$PATH:`pwd`,保存
source ~/.bashrc  #環(huán)境變量添加成功
#vim模式下
:set nu   #顯示行號
:set nonu   #不顯示行號

esc模式下:

  • gg 跳到文件開頭
  • G 跳到文件最后一行

按鍵盤v ,進(jìn)入剪切復(fù)制模式:

  • d 選中
  • y 復(fù)制
  • p 粘貼

shell輸入輸出

  • read 用來讀取輸入,并賦值給變量
# -p:提示用戶輸入內(nèi)容
read -p "請輸入:"
# -n:指定輸入字?jǐn)?shù)
read -n1 -p "請輸入Y/N:"
echo
echo $REPLY
# -s:加密輸入內(nèi)容
read -s -p "請輸入密碼:"
  • $REPLY:內(nèi)置函數(shù),往往只接受read的一個(gè)參數(shù),如需多個(gè),則需指定賦值給哪個(gè)參數(shù)
read -p "請輸入主機(jī)名稱:" hostname
read -p "請輸入IP地址:" ip
function check_host
{
    # ip="$1"
    # hostname = "$2"
    ping -c1 -W2 "&{ip}" &> /dev/null
    [ $? -eq 0 ] && echo -e "主機(jī)【&{hostname}】在線" || echo -e "主機(jī)【&{hostname}】離線"
}
# check_host 114.114.114.114 應(yīng)用服務(wù)器1
check_host
  • echo,print 可以簡單輸出變量
  • file 將輸出重定向到另一個(gè)文件,等價(jià)于 tee

  • < file 輸入重定向
  • | 表示管道,也就是前一個(gè)命令的輸出傳入下一個(gè)命令的輸入
echo "hello world" > 1  #1文件里內(nèi)容為hello world,覆蓋原來的文件內(nèi)容
echo "hello china" >>1  #1文件里內(nèi)容為hello world  hello china,向原來文件追加內(nèi)容
vim 222  #hello world \n hello china
read x < 222   #從222文件讀取內(nèi)容輸入到x
echo $x  #222文件內(nèi)容
ls > 1  #1文件內(nèi)容為執(zhí)行l(wèi)s命令后返回的數(shù)據(jù)
ls ddd >1 2>&1    #標(biāo)準(zhǔn)輸入(1)和標(biāo)準(zhǔn)錯(cuò)誤(2)都重定向到1文件中

vim text1
#hello world
#email
#hhh
#little
vim text2
#hello world,this is a grep test.
#email
#hhh
#little
vim text2
#hello world
#email
#ffff
#little
grep -i "hello world" text1 text2 text3   
#text1:hello world
#text2:hello world,this is a grep test.
#text1:hello world
-i  :不區(qū)分大小寫
-o  :只顯示需要的字符串
grep -o "hello world" text1 text2 text3   
#text1:hello world
#text2:hello world
#text1:hello world
grep -io "hello world" text1 text2 text3   
#text1:hello world
#text2:hello world
#text1:hello world
echo abcd | grep -o c   #c

正則表達(dá)式

  • . 表示任意一個(gè)字符
  • * 表示前面的字符有0個(gè)或多個(gè)
  • .* 表示任意一個(gè)有0個(gè)或多個(gè)的字符
curl www.baidu.com
vim baidu.keyword     #\mp3\nmp4\nrest-assured\nandroid\nios
while read k;do echo $k;done < baidu.keyword    #\mp3\nmp4\nrest-assured\nandroid\nios
while read k; do $k ;curl http://www.baidu.com/s?wd=$k; done < baidu.keyword  #搜索相應(yīng)的內(nèi)容后返回的網(wǎng)頁代碼輸出到baidu.keyword
while read k; do $k ;curl -s http://www.baidu.com/s?wd=$k; done < baidu.keyword | grep -o  "結(jié)果約[0-9,]*"   #顯示結(jié)果約和數(shù)量
while read k; do $k ;curl -s http://www.baidu.com/s?wd=$k; done < baidu.keyword | grep -o  "結(jié)果約[0-9,]*" | grep -o "[0-9,]*"   #只顯示數(shù)字
while read k; do $k ;curl -s http://www.baidu.com/s?wd=$k; done < baidu.keyword | grep -o  "結(jié)果約[0-9]*"  | while read x;do printf $x;done;echo;done <baidu.keyword

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

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