shell編程

1.source命令

source 配置文件    # 立即是配置文件生效
. 配置文件         # ./ 是當(dāng)前文件夾  .后加空格效果等于source

2.配置文件

/etc/profile       #對(duì)每個(gè)用戶起作用
/etc/profile.d/*.sh
/etc/bashrc
~/bash_profile    #每個(gè)用戶的配置文件
~/.bashrc     
~/.bash_logout    #退出執(zhí)行

PS1變量
umash
PATH
umask

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/20369CE2-564A-4E06-A944-684EC910E649.png)

3.登錄提示信息(issue只對(duì)本機(jī)妓灌,如果issue.net遠(yuǎn)程登錄)

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/C9BED461-9647-4109-9A04-0EAACC857562.png)

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/7E325742-2430-4127-96A3-0C6B6A035821.png)

4.退出歡迎

/etc/motd   #遠(yuǎn)程和本地都可以

5.echo命令

 mac@MacBook-Air  ~/Desktop  echo -e "\e[1;31m 我喜歡你蘭老師,我要追你 \e[0m"
 我喜歡你蘭老師沟娱,我要追你
 \n #換行
 \t #table
30m 31m 32m 33m 34m 35m 36m 37m
黑色 紅色 綠色 黃色 藍(lán)色 洋紅 青色 白色

一嗡官、Bash的基礎(chǔ)功能

  • 歷史別名和快捷鍵

    alias mvn="/Users/liuxin/Desktop/apache-maven-3.2.1/bin"
    
  • 輸出重定向

    • 鍵盤(pán)輸出 /dev/stdin 0
    • 顯示輸出 /dev/stdout 1
    • 錯(cuò)誤輸出 /dev/stderr 2
    • 覆蓋重定向 >
    • 追加重定向 >>
    • 輸出報(bào)錯(cuò)信息 2>
    • 命令 >~/text 2>&1 如果命令正確就寫(xiě)到text中恋日,錯(cuò)誤就輸出到2里然后在輸出到1里面
    • 命令&>~/text 等同于上一個(gè),簡(jiǎn)單寫(xiě)法
    • 命令>文件1 2>文件2 把正確的放文件1嘹狞,錯(cuò)誤的放到文件2
  • 多命令順序執(zhí)行

    • ; 多個(gè)命令順序執(zhí)行 【缺點(diǎn)就是錯(cuò)誤了岂膳,后面也執(zhí)行】
    • && 連接服 【如果錯(cuò)就不執(zhí)行】
    • 命令1&&命令2 【命令1對(duì)就執(zhí)行命令2,不對(duì)就不執(zhí)行2了】
    • 命令1||命令2 【 命令1錯(cuò)誤了磅网,就執(zhí)行命令2谈截,對(duì)了就不執(zhí)行命令2
    • ls && echo yes || echo no 【 如果正確就yes如果錯(cuò)了就no
  • 輸入重定向(crtl+d查看)

    • -c 統(tǒng)計(jì)字節(jié)數(shù)
    • -w 統(tǒng)計(jì)單詞數(shù)
    • -i 統(tǒng)計(jì)行數(shù)
    • wc < access.log 或者wc access.log 統(tǒng)計(jì)文件
    • Wc << ddy 當(dāng)輸入的內(nèi)容中遇到ddy就結(jié)束,開(kāi)始統(tǒng)計(jì)
  • Shell統(tǒng)配符號(hào)

    • ? 匹配一個(gè)任意字符
    • * 匹配0個(gè)或多個(gè)
    • [] 匹配中括號(hào)中任意一個(gè)
    • [-] 匹配中括號(hào)中范圍 [a-z]任何一個(gè) 一個(gè)
    • [^] 不匹配中括號(hào)中范圍 [^a-z]
  • 管道福

    • 命令1 | 命令2 【命令1的內(nèi)容涧偷,作為命令2的條件】
    • ls -i /etc | more 【分屏幕查看】
  • 黑洞

    • ls &>/dev/null 所有信息簸喂,都扔了不看

二、Bash變量

  • export 變量名=變量值

  • Bash 進(jìn)入子shell 然后export y=123 然后set就能看到y(tǒng)的變量

    mac@MacBook-Air  ~/Desktop  bash
    bash-3.2$ export y=123
    bash-3.2$ set
    
  • Locale 查看語(yǔ)系 等同于 echo $LANG

    mac@MacBook-Air  ~/Desktop  echo $LANG
    zh_CN.UTF-8
    
  • 位置參數(shù)變量

    $n n為數(shù)字燎潮,$0代表命令本身娘赴,$1-$9 代表第一到第九個(gè)參數(shù),十以上參數(shù)跟啤,需要大括號(hào)${10}
    $* 這個(gè)變量代表命令行中所有的參數(shù)诽表,$* 把所有參數(shù)看成一個(gè)整體
    $@ 這個(gè)把命令行中參數(shù)區(qū)別對(duì)待,可以遍歷
    $# 這個(gè)變量代表命令行中所有參數(shù)的個(gè)數(shù)
    $? 返回零代表執(zhí)行成功隅肥,反之失敗
    $$ 當(dāng)前進(jìn)程號(hào)
    $! 后臺(tái)運(yùn)行進(jìn)程號(hào)

    ?

    #!bin/shell
    num1=$1
    num2=$2
    sum=$(($num1+$num2))  # 雙括號(hào)竿奏,如果是單括號(hào),是輸出字符串腥放,雙括號(hào)是計(jì)算
    echo $sum
    
    #!bin/shell
    #在當(dāng)前目錄下創(chuàng)建num1目錄泛啸,然后進(jìn)入num1目錄創(chuàng)建num2目錄
    num1=$1
    num2=$2
    cd ./
    mkdir $1
    cd ./$1
    mkdir $2
    

    ?

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/6021D4E2-A302-455B-9162-B78530DCA613.png)

#!bin/bash

for i in "$@"
    do
        echo "$i"
    done
  • Read 鍵盤(pán)接受變量
參數(shù) 解釋
-p 提示信息
-t 秒數(shù)
-n 字符限制
-s 隱藏輸入
#!/bin/bash
read -p "please input your name:" name
echo "你好,$name 先生"
#!/bin/bash
#時(shí)間限制30秒
read -p "please input your name in 30s:" -t 30 name
echo "你好,$name 先生"
#!/bin/bash
#隱藏輸入
read -p "please input your password:" -s password
echo "你好,$name 先生"
#!/bin/bash
#只允許接受一個(gè)字符,如果不是一個(gè)就終止運(yùn)行
read -p "please input [y|n] end:" -n 1 pw
echo "退出成功"

四秃症、bash運(yùn)算符

  • declare 聲明變量類(lèi)型

    declare [+/-] [選項(xiàng)] 變量名
    > - :給變量設(shè)定類(lèi)型屬性
    > + :取消變量的類(lèi)型屬性
    > -a:將變量聲明為數(shù)組型
    > -i:將變量聲明為整數(shù)類(lèi)型(integer)
    > -x:將變量聲明為環(huán)境變量
    > -r:將變量聲明為只讀變量
    > -p:顯示指定變量的被聲明的類(lèi)型
    
    movie[0]=1
    movie[1]=2
    declare -a movie[2]=3
    echo ${movie}
    echo ${movie[2]}
    echo ${movie[*]}
    
  • 字符串截取命令

    • cut 字段提取
      • -f 列號(hào):提取第幾列
      • -d 分隔符: 按照指定分隔符分割 默認(rèn)是table
    mac@MacBook-Air  ~/Desktop/ssh  cat student
    UID   NAME
    1 liuxin
    2 ayu
    3 haoliang
    4 sunxiao
    # 提取包含i的行數(shù)候址,但是不包含sun
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun
    1 liuxin
    3 haoliang
    # 截取第二列 默認(rèn)是table分隔符
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun | cut -f 2
    liuxin
    haoliang
    mac@MacBook-Air  ~/Desktop/ssh  grep i student | grep -v sun | cut -f 2
    liuxin
    haoliang
    
    #包含bin/bash的行
    mac@MacBook-Air  ~/Desktop/ssh  grep bin/bash /etc/passwd
    _mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash
    #通過(guò):分割的第五列
    mac@MacBook-Air  ~/Desktop/ssh  grep bin/bash /etc/passwd | cut -f 5 -d ":"
    Setup User
    

    ?

    • printf
    • awk
    • grep
      • -v 取反

五、邏輯判斷語(yǔ)句

![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/709FED10-B1FA-4C82-BDAB-890B9BFFB681.png)

  • -e 文件是否存在

  • -d 目錄是否存在

    test -e /root/bin/install.log
    test -d /root
    
    [-e /root/bin/install.log]
    [-d /root]
    

    ?

  • 文件權(quán)限判斷![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/26D69B84-DA59-46BF-BB4F-5E56861F8CE8.png)

  • 兩個(gè)文件之間進(jìn)行比較

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/10E950D3-F1F7-4127-BC5F-9A50BB809069.png)

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

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/E55462AA-4FC2-4CC5-9982-84210E1CCE84.png)

  • 字符串判斷

    ![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/17CAD21B-0719-4764-8A2E-EF4C9767CFED.png)

  • 多重判斷![](/Users/mac/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1213327162/QQ/Temp.db/5107B155-D778-44F1-ADCF-F5EA62B13314.png)

六种柑、流程控制語(yǔ)句

  • 單分支if語(yǔ)句

    if [];then
      程序
    fi
    ---
    if[]
      then
      程序
    fi
    
    read -p "請(qǐng)輸入你的項(xiàng)目名:" projectName
    read -p "請(qǐng)輸入動(dòng)物名:" groupId
    read -p "請(qǐng)輸入服務(wù)名:" categoryId
    echo -e "\e[1;31m 正在為你創(chuàng)建 $projectName 項(xiàng)目... \e[0m "
    pro=$projectName
    animal=$groupId
    category=$categoryId
    mkdir $pro && $pro創(chuàng)建完整 || $pro 創(chuàng)建失敗
    cd $pro
    mkdir src
    cd src
    mkdir main
    mkdir test
    cd main
    mkdir java
    mkdir resources
    cd java
    mkdir $animal
    cd $animal
    mkdir $category
    mkdir domain
    mkdir base
    mkdir config
    mkdir dao
    mkdir manager
    mkdir modle
    mkdir rest
    mkdir service
    mkdir util
    cd dao
    mkdir impl
    cd ../modle
    mkdir do
    mkdir dto
    mkdir vo
    cd ../service
    mkdir impl
    cd ../../resources
    mkdir config
    cd ../
    touch application.properties
    touch application-test.properties
    touch application-pro.properties
    touch application-stg.properties
    

    ?


shell正式開(kāi)始

第一個(gè)腳本

#!/bin/bash
#創(chuàng)建項(xiàng)目
read -p "請(qǐng)輸入你的項(xiàng)目名:" projectName
read -p "請(qǐng)輸入動(dòng)物名:" groupId
read -p "請(qǐng)輸入服務(wù)名:" categoryId
if [-z $projectName]
    then
    read -p "請(qǐng)檢查輸入的內(nèi)容是否為空岗仑,輸入yes退出" -n 1 pw
fi

if [-z $groupId]
    then
    read -p "請(qǐng)檢查輸入的內(nèi)容是否為空,輸入yes退出" -n 1 pw
fi
    
if [-z categoryId]
    then
    read -p "請(qǐng)檢查輸入的內(nèi)容是否為空聚请,輸入yes退出" -n 1 pw
fi
pro=$projectName
animal=$groupId
category=$categoryId
mkdir $pro
cd $pro
mkdir src
cd src
mkdir main
mkdir test
cd main
mkdir java
mkdir resources
cd java
mkdir $animal
cd $animal
mkdir $category
mkdir domain
mkdir base
mkdir config
mkdir dao
mkdir manager
mkdir modle
mkdir rest
mkdir service
mkdir util
cd dao
mkdir impl
cd ../modle
mkdir do
mkdir dto
mkdir vo
cd ../service
mkdir impl
cd ../../../resources
mkdir config
touch application.properties
touch application-test.properties
touch application-pro.properties
touch application-stg.properties
cd ../../../
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
echo -e "\033[41;37m 已經(jīng)為你創(chuàng)建完成 $pro 項(xiàng)目 \033[0m"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荠雕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驶赏,更是在濱河造成了極大的恐慌炸卑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤傍,死亡現(xiàn)場(chǎng)離奇詭異盖文,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蚯姆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)五续,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洒敏,“玉大人,你說(shuō)我怎么就攤上這事返帕。” “怎么了篙挽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵荆萤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我铣卡,道長(zhǎng)链韭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任煮落,我火速辦了婚禮敞峭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝉仇。我一直安慰自己旋讹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布轿衔。 她就那樣靜靜地躺著沉迹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪害驹。 梳的紋絲不亂的頭發(fā)上鞭呕,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音宛官,去河邊找鬼葫松。 笑死,一個(gè)胖子當(dāng)著我的面吹牛底洗,可吹牛的內(nèi)容都是我干的腋么。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亥揖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼党晋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起徐块,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤未玻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胡控,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扳剿,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年昼激,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庇绽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锡搜。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧掺,靈堂內(nèi)的尸體忽然破棺而出耕餐,到底是詐尸還是另有隱情,我是刑警寧澤辟狈,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布肠缔,位于F島的核電站,受9級(jí)特大地震影響哼转,放射性物質(zhì)發(fā)生泄漏明未。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一壹蔓、第九天 我趴在偏房一處隱蔽的房頂上張望趟妥。 院中可真熱鬧,春花似錦佣蓉、人聲如沸披摄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)行疏。三九已至,卻和暖如春套像,著一層夾襖步出監(jiān)牢的瞬間酿联,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工夺巩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贞让,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓柳譬,卻偏偏與公主長(zhǎng)得像喳张,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子美澳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Bash內(nèi)置基本變量 PWD : 顯示當(dāng)前的工作目錄 OLDPWD : 顯示上一次的工作目錄 ~:用戶家目錄 - ...
    魏鎮(zhèn)坪閱讀 1,529評(píng)論 0 6
  • 1. shell腳本: 包含一些命令或聲明销部,并符合一定格式的文本文件 ? 格式要求:首行shebang(#!)機(jī)制...
    尛尛大尹閱讀 1,887評(píng)論 0 1
  • 數(shù)字比較 ``` -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if...
    飛翔你我閱讀 283評(píng)論 0 0
  • [轉(zhuǎn)自]http://www.jb51.net/article/52586.htm做了小幅修改 本文列舉BASH ...
    咕咕鷄閱讀 2,594評(píng)論 0 1
  • Shell簡(jiǎn)介 Shell會(huì)執(zhí)行用戶輸入的命令,并且在屏幕上顯示執(zhí)行的結(jié)果制跟。 單從字面的意思上理解舅桩,Shell的本...
    故事狗閱讀 1,738評(píng)論 2 10