1.Shell基本概述

Shell基本概述

1.shell入門

1)什么是shell  殼
 命令解釋器  用戶輸入命令 解釋器負(fù)責(zé)解釋給內(nèi)核 處理后的結(jié)果 反饋用戶 稱為解釋
 交互式shell 用戶輸入命令 解釋器解釋把處理后的結(jié)果反饋給用戶的過程稱為 交互式
 非交互shell shell執(zhí)行文本中的命令 當(dāng)執(zhí)行到文件的末尾 bash退出
 父shell 不能繼承子shell變量  子shell可繼承父shell變量
2)什么是shell腳本
 把可執(zhí)行命令堆積到一個(gè)文本中則稱為shell腳本(條件表達(dá)式 for循環(huán) if判斷等等語(yǔ)句)

shell執(zhí)行方式

hello world!
執(zhí)行腳本的三種方式   
1)bash test.sh
[root@web01 scripts]# bash test.sh
Hello World!
2)全路徑執(zhí)行
[root@web01 scripts]# chmod +x test.sh 
[root@web01 scripts]# /server/scripts/test.sh
Hello World!
3). 或者source執(zhí)行
[root@web01 scripts]# . test.sh
Hello World!
[root@web01 scripts]# source test.sh
Hello World!
什么區(qū)別?
1 2 在子shell中執(zhí)行
. source 父進(jìn)程下執(zhí)行

環(huán)境變量

1.環(huán)境變量定義

什么是環(huán)境變量?
右邊一堆內(nèi)容,用一個(gè)名字來代替稱為環(huán)境變量
name="I am lizhenya"
如何查看環(huán)境變量? 名稱的前面加上echoname
如何查看系統(tǒng)定義好的環(huán)境變量
env set
如何取消環(huán)境變量?
unset name
環(huán)境變量(全局變量) 普通變量(局部變量)
按照生存周期劃分
永久性 修改配置文件 /etc/profile
臨時(shí)性 使用export 變量名稱 聲明即可
不加export 只對(duì)當(dāng)前的shell生效
加export 對(duì)當(dāng)前登錄窗口所有的shell生效

2.環(huán)境變量的相關(guān)文件

   1. /etc/profile 開機(jī)或者新連接的窗口執(zhí)行一次
   2. .bashrc
   3. .bash_profile
   4. /etc/bashrc

3.如何定義環(huán)境變量

   變量名=變量值
   環(huán)境變量名稱的定義      字符 下劃線 數(shù)字的組合 盡量以字母開頭(禁止使用數(shù)字開頭) 等號(hào)兩端不允許有空格  見名知其意

4.書寫方式

   1. OLDBOY_AGE=18     系統(tǒng)中變量的定義格式
   2. oldboy_age=18
   3. oldboy_Age=18   小駝峰語(yǔ)法
   4. Oldboy_Age=18   大駝峰語(yǔ)法

5.變量值的定義方式

1.數(shù)字定義

oldboy_age=18   連續(xù)的數(shù)字

2.字符串的定義

   name="oldboy"    使用雙引號(hào) 不知道加什么符號(hào) 就加雙引號(hào)  解析變量
   name='oldboy'    所見即所得  吃什么吐什么

3.命令的定義

   time=`date`   反引號(hào)  里面必須跟可執(zhí)行命令
   time=$(date)   $()
   [root@web01 scripts]# name=oldboy
    [root@web01 scripts]# echo "$oldboyisok"

    [root@web01 scripts]# echo "${oldboy}isok"
    isok
    [root@web01 scripts]# echo "${name}isok"
    oldboyisok
    [root@web01 scripts]# echo '${name}isok'
    ${name}isok

重要的特殊位置變量

    $0  腳本的名稱,如果全路徑執(zhí)行腳本,則腳本名稱也帶全路徑 basename 獲取腳本的名稱 重要
        案例: 給用戶提示如何使用此腳本
        echo $"Usage: $0 {start|stop|status|restart|force-reload}"
    $n  腳本的第n個(gè)參數(shù) $0被腳本名稱占用 從$1開始 $9以后 需要加{}
    $#  代表了腳本的傳參的總個(gè)數(shù)  重要
        案例:
        [ $# -ne 2 ] && echo "你請(qǐng)輸入兩個(gè)參數(shù)" && exit
    $*  腳本的所有的傳參的參數(shù) 如果不加雙引號(hào)則和$@相同 加上雙引號(hào)則把所有參數(shù)視為一個(gè)整體
    $@ 腳本的所有的傳參的參數(shù) 如果不加雙引號(hào)則和$*相同加上雙引號(hào)則把所有參數(shù)視為獨(dú)立的參數(shù)
       $* 和$@ 正常情況下一樣  循環(huán)體內(nèi)不同
    $?  獲取上一條命令的結(jié)果 0為成功 非0 失敗  重要   
    $$  獲取腳本的PID
        案例
        服務(wù)器運(yùn)行大量的名稱相同的腳本
        echo $$ > /tmp/count.pid
    $!  上一個(gè)在后臺(tái)運(yùn)行腳本的PID 調(diào)試使用
    $_   獲取腳本的最后一個(gè)參數(shù) 相當(dāng)于ESC .

傳參的三種方式

1)直接傳參
2)賦值傳參
3)read傳參

1.第一種傳參方式

sh a.sh $1
echo $1 $2

2.第二種傳參方式

name=$1
age=$2
echo $name $age
read -p "請(qǐng)輸入名字和年齡" name1 age1
echo $name1 $age1

3.使用read 傳參的方式 更改系統(tǒng)的主機(jī)名稱和IP地址的最后一位 192.168.12.X

案例:

    #!/bin/sh
    sdir="/etc/sysconfig/network-scripts/ifcfg-eth0"
    sip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0|awk -F. '/IPADDR/{print $NF}'|cut -c1`
    read -p "請(qǐng)輸入主機(jī)名稱: " name
    hostnamectl set-hostname $name
    read -p "請(qǐng)輸入IP地址的最后一位: " ip
    sed -i "s#$sip#$ip#g"  $sdir
    案例:
    sh ping.sh www.baidu.com
    ping www.baidu.com is ok
    sh ping.sh www.xxxxx.com is error
    [root@web01 scripts]# cat ping.sh 
    #!/bin/sh
    read -p "請(qǐng)輸入一個(gè)網(wǎng)址: " url
    ping -c 1 -W 1 $url >/dev/null 2>&1
    [ $? -eq 0 ] && echo "ping $url is ok" || echo "ping $url is error"

變量的字符串知識(shí)

1.統(tǒng)計(jì)變量的長(zhǎng)度

    [root@web01 scripts]# name="I am lizhenya"
    [root@web01 scripts]# echo $name
    I am lizhenya
    [root@web01 scripts]# echo "I am lizhenya"
    I am lizhenya
    [root@web01 scripts]# echo "I am lizhenya"|wc -L
    13
    [root@web01 scripts]# echo $name|wc -L
    13
    [root@web01 scripts]# echo ${#name}
    13

2.變量的切片

    [root@web01 scripts]# echo ${name:0:1}
    I
    [root@web01 scripts]# echo ${name:2:2}
    am
    [root@web01 scripts]# echo ${name:0:1}
    I
    [root@web01 scripts]# echo ${name:1}
    am lizhenya
    [root@web01 scripts]# echo ${name:2:5}
    am li

3.取字符串長(zhǎng)度

    ###I am lizhenya teacher I am 18
    方法1
    echo I am lizhenya teacher I am 18|wc -L
    方法2
    name="I am lizhenya teacher I am 18"
    echo ${#name}
    方法3
    [root@web01 scripts]# expr length "$name"
    29
    方法4
    [root@web01 scripts]# echo $name|awk '{print length}'
    29

4.取字符串長(zhǎng)度小于3的

    方法1 
    for循環(huán)方式
        [root@web01 scripts]# cat for.sh 
        #!/bin/sh
        for i in I am lizhenya teacher I am 18
        do
            [ ${#i} -lt 3 ] && echo $i
        done
    方法2
    [root@web01 scripts]# echo I am lizhenya teacher I am 18|xargs -n1|awk '{if(length<3)print}'
    I
    am
    I
    am
    18
    方法3
    [root@web01 scripts]# echo I am lizhenya teacher I am 18|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'

5.變量的刪除和替換

        從前往后刪除變量?jī)?nèi)容
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url#*.}
        sina.com.cn
        [root@web01 scripts]# echo ${url#*.*.}
        com.cn
        [root@web01 scripts]# echo ${url##*.}
        cn
        從后往前刪除變量?jī)?nèi)容
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url%.*}
        www.sina.com
        [root@web01 scripts]# echo ${url%%.*}
        www
        變量的替換
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url/w/a}
        aww.sina.com.cn
        [root@web01 scripts]# echo ${url/w/aa}
        aaww.sina.com.cn
        [root@web01 scripts]# echo ${url/w/a}
        aww.sina.com.cn
        [root@web01 scripts]# echo ${url//w/a}
        aaa.sina.com.cn
        [root@web01 scripts]# echo ${url/sina/baidu}
        www.baidu.com.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子股毫,更是在濱河造成了極大的恐慌整袁,老刑警劉巖肢专,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媳握,死亡現(xiàn)場(chǎng)離奇詭異各拷,居然都是意外死亡芥丧,警方通過查閱死者的電腦和手機(jī)紧阔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來续担,“玉大人擅耽,你說我怎么就攤上這事∥镉觯” “怎么了乖仇?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)询兴。 經(jīng)常有香客問我乃沙,道長(zhǎng),這世上最難降的妖魔是什么诗舰? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任警儒,我火速辦了婚禮,結(jié)果婚禮上眶根,老公的妹妹穿的比我還像新娘蜀铲。我一直安慰自己边琉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布记劝。 她就那樣靜靜地躺著艺骂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隆夯。 梳的紋絲不亂的頭發(fā)上钳恕,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蹄衷,去河邊找鬼忧额。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愧口,可吹牛的內(nèi)容都是我干的睦番。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼耍属,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼托嚣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厚骗,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤示启,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后领舰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夫嗓,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年冲秽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舍咖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锉桑,死狀恐怖排霉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情民轴,我是刑警寧澤攻柠,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站杉武,受9級(jí)特大地震影響辙诞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轻抱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一飞涂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦较店、人聲如沸士八。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婚度。三九已至,卻和暖如春官卡,著一層夾襖步出監(jiān)牢的瞬間蝗茁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工寻咒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮翘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓毛秘,卻偏偏與公主長(zhǎng)得像饭寺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叫挟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349