Linux-Shell(三)

  • Shell格式
1嘱蛋、擴(kuò)展名: xxx.sh
2矮冬、正文第一行必須指定解釋器: #!/bin/bash
  • shell執(zhí)行方式
# 方式一: 加權(quán)限,  ./xxx.sh 執(zhí)行
1废睦、chmod +x  xxx.sh
2、./xxx.sh

# 方式二: 手動(dòng)指定解釋器
bash xxx.sh
  • 自定義變量
# 1. 定義變量
變量名=值    ---->  注意: =兩側(cè)絕對(duì)不能有空格
eg1: name="take me to your heart"

# 2. 調(diào)用變量的格式
echo $變量名

# 01_variable_1.sh
name="風(fēng)云雄霸天下"
echo $name
     
# 3. 小細(xì)節(jié): 單引號(hào)和雙引號(hào)的區(qū)別
單引號(hào): 無法獲取變量的值
雙引號(hào): 可以獲取變量的值
  • 環(huán)境變量+位置變量+預(yù)設(shè)變量
# 環(huán)境變量
echo $USER   --  當(dāng)前用戶
echo $UID    --  當(dāng)前用戶的UID號(hào)
echo $PWD    --  當(dāng)前路徑
echo $PATH   --  命令搜索路徑

# 位置變量
$1 $2 $3 ... ... shell的位置變量

# 預(yù)定義變量
$# $* $?

# $? : 返回上一條命令執(zhí)行的狀態(tài)(0代表正確,非0代表失敗)

練習(xí)

輸出$1+$2,例如輸出結(jié)果: 3+5
#!/bin/bash
echo $1+$2
  • 變量賦值 - 接收用戶從終端輸入的值
# 語法格式
read -p 提示信息 變量名

# 05_read.sh
#!/bin/bash
read -p 請(qǐng)輸入姓名: name
echo "您輸入的姓名是:$name"

# 指定超時(shí)時(shí)間
read -p 提示信息 變量名
read -t n -p 提示信息 變量名

# 06_read_t.sh 限制3秒中之內(nèi)必須輸入值
#!/bin/bash
read -t 3 -p 請(qǐng)輸入用戶名: username

練習(xí)

1饮戳、輸入學(xué)生姓名: 趙敏
2、輸入學(xué)生成績(jī): 88
3、輸出: 趙敏的成績(jī)?yōu)?8分

Ubuntu設(shè)置sudo免密碼

# 通過更改 /etc/sudoers 實(shí)現(xiàn)
1温治、備份: sudo cp /etc/sudoers .
2、修改: sudo vi /etc/sudoers
   添加: tarena ALL=(ALL) NOPASSWD : ALL

練習(xí)

請(qǐng)使用位置變量的方式實(shí)現(xiàn)用戶名的創(chuàng)建
#!/bin/bash
sudo useradd $1
echo "$1創(chuàng)建成功"
運(yùn)行: ./文件名   用戶名
# 創(chuàng)建用戶名: useradd 用戶名
# 刪除用戶名:userdel 用戶名
  • shell - 算術(shù)運(yùn)算符
# 運(yùn)算符
1戒悠、+ - * / % 
2熬荆、++ : 自加1運(yùn)算,類似于python中  i+=1
3、-- : 同++
            
# 運(yùn)算命令
1绸狐、let 運(yùn)算表達(dá)式
    i=1
    let i++
    echo $i
2卤恳、expr 運(yùn)算表達(dá)式
    i=1
    sum=`expr $i + 5` # +兩側(cè)要有空格
    echo $sum
3累盗、$[]
    echo $[1+1]
    echo $[1-1]
    echo $[a+a] # 調(diào)用變量不用多次添加$符號(hào)
    echo $[1*1] # 乘法無需轉(zhuǎn)義

練習(xí)

使用 位置變量+以上方法一、二中任何一種,實(shí)現(xiàn)2個(gè)數(shù)字的相加
#!/bin/bash
echo $[$1+$2]
echo `expr $1 + $2`
  • shell - 比較運(yùn)算符
# 語法格式
 [  判斷語句  ]      # 注意括號(hào)必須有空格
# 組合
&& 并且
|| 或者
A命令  &&  B命令   //僅當(dāng)A成功時(shí)才執(zhí)行B
A命令  ||  B命令   //僅當(dāng)A失敗時(shí)才執(zhí)行B
思考: [ a == a ] && echo Y || echo N 代表什么意思突琳?
#Y

# 1若债、字符比較
[ A == A ]    #相等(等號(hào)兩邊需要有空格)
[ A != B ]    #不相等
[ -z $變量 ]  #判斷是否為空
思考(Y 還是 N):  [ $USER == tarena ] && echo Y || echo N

練習(xí): 用戶輸入用戶名,判斷是否為空,不為空時(shí)創(chuàng)建,否則直接退出程序
#!/bin/bash
read -p "請(qǐng)輸入用戶名:" username
[ -z $username ] && exit
sudo useradd $username

# 2拆融、數(shù)字比較
    -eq 等于(equal)
    -ne 不等于(not equal)
    -gt 大于(greater than)
    -ge 大于等于(great or equal)
    -lt 小于(less than)
    -le 小于等于(less or equal)
思考輸出什么:
[ 10 -eq 10 ] && echo Y || echo N   #Y
[ 11 -le 10 ] && echo Y || echo N  #N
[ 12 -ge 3 ] && echo Y || echo N  #Y

# 3蠢琳、文件|目錄比較
   [ -e 文件或目錄 ]    #是否存在exist
   [ -f  文件      ]    #存在且為文件file
   [ -d  目錄      ]    #存在且為目錄directory
   [ -r 文件或目錄 ]    #判斷是否可讀read
   [ -w 文件或目錄 ]    #判斷是否可寫write
   [ -x 文件或目錄 ]    #判斷是否可執(zhí)行
思考輸出:
    [ -e /etc/passwd ] && echo Y || echo N #Y
    [ -f /etc/passwd ] && echo Y || echo N #Y
    [ -d /etc/passwd ] && echo Y || echo N # N

if分支結(jié)構(gòu)

# 1、單分支語法格式
     if 判斷 ;then
        命令
        命令
     fi
# 2镜豹、雙分支語法格式
    if 判斷 ;then
        命令1
    else
        命令2
    fi
# 3傲须、多分支語法格式
  if 判斷;then
    命令1
  elif 判斷 ;then
    命令2
  else
    命令3
  fi
# 示例
#!/bin/bash
if [ $USER == tarena ];then
    echo "Yes,You are Tarena."
else
    echo "You are other man."

練習(xí)

使用shell編寫猜數(shù)字游戲,無須循環(huán)
# 計(jì)算機(jī)隨機(jī)出數(shù)字:computer=$RANDOM
#!/bin/bash
# 生成1-5直接的隨機(jī)數(shù)
num=$[RANDOM%5+1]
read -p "輸入你猜的數(shù)字:" num_input

echo $num
if [ $num -eq $num_input ];then
        echo "Well done!"
        exit
elif [ $num_input -lt $num ];then
        echo "Too small"

else
        echo "Too big"
fi

  • for循環(huán)
# 語法格式
for 變量 in 值序列
do
    命令
done
# 示例
for i in 1 2 3 4 5
do
    echo "hello world"
done
# 示例2: 1-8
for i in {1..8}
# 示例3: 執(zhí)行Linux命令,獲取結(jié)果
for i in `Linux命令`
# 示例4: 造數(shù) seq
seq 1 2 10 # 1 3 5 7 9    (起始值   步長(zhǎng)   終止值)

造數(shù)

seq 1 2 10 # 1 3 5 7 9    (起始值   步長(zhǎng)   終止值)
seq 3 8 #3 4 5 6 7 8

練習(xí)

把猜數(shù)字游戲改為for循環(huán),猜測(cè)100次
#!/bin/bash

#把猜數(shù)字游戲改為for循環(huán)趟脂,猜測(cè)100次

computer=$[RANDOM%10000+1]

for i in {1..30}
do
        read -p "please guess:" guess
        if [ $computer -eq $guess ];then
                echo "Well done!"
                exit
        elif [ $computer -gt $guess ];then
                echo "Too small"
        else
                echo "Too big"
        fi
done


# 練習(xí):判斷指定網(wǎng)段的IP地址哪些可以用,哪些不能用泰讽?
#!/bin/bash
online=0
down=0
for i in {2..254}
do
        ping -c 1 176.209.108.$i &> /dev/null #黑洞
        if [ $? -eq 0 ];then
                echo "176.209.108.$i onLine "
                let online++
        else
                echo "176.209.108.$i Down"
                let down++
        fi
echo "Online : $online"
echo "Down : $down"
done

mysql 設(shè)置遠(yuǎn)程連接

1. 開啟遠(yuǎn)程連接 - 服務(wù)端
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
將如下行注釋掉
# bind-address 127.0.0.1
sudo service mysql restart
2. 授權(quán)用戶
mysql -uroot -p123456
mysql > grant all privileges on *.*to 'tiger'@'%'

c-for 循環(huán)

for ((賦初值;條件;步長(zhǎng)))
do 
 執(zhí)行命令
 done
 # 示例 打印1-5 之間的整數(shù)
 for ((i=1;i<=5;i++))
 do
    echo $i
 done
  • while循環(huán)
# 語法格式
while 條件判斷
do
    命令
done

# 示例
#!/bin/bash
i=1
while [ $i -lt 5 ]
do
   echo $i
   let i++
done
# 死循環(huán)
while:
    do
    執(zhí)行命令
    done
    # 示例:
    #!/bin/bash

# 簡(jiǎn)陋的計(jì)時(shí)器
i=1
while :
do
    echo $i
    let i++
    sleep 1
    clear
done

文本處理工具-sed

# 1. 定義: 非交互式文本編輯器,逐行處理
# 2. 語法格式
sed [選項(xiàng)] '條件指令' 文件名
指令: 增刪改查
# 查詢   ->  p
sed -n 'p' 17_sed.txt # 打印所有內(nèi)容
sed -n '1p' 17_sed.txt  #打印第1行內(nèi)容
sed -n '1,3p' 17_sed.txt # 打印第1到3行內(nèi)容
sed -n '1p;3p' 17_sed.txt # 打印1和3行內(nèi)容
# 刪除   ->  d
sed -i '1d' 17_sed.txt  # 刪除第一行
sed -i '$d' 17_sed.txt  # 刪除最后一行
# 改  -> c
sed  -i  '1c內(nèi)容' 17_sed.txt  #修改第1行
sed  -i  -e '1c李白' -e  '3c杜甫' 17_sed.txt #修改第1和第3行
# 增加  -> a     i
a : 在當(dāng)前處理行的下一行插入
i: 在當(dāng)前處理航的上一行插入
sed -i '1a李白' 17_sed.txt
# 替換 ->  s
sed -i '條件/原內(nèi)容/新內(nèi)容/選項(xiàng)' 文件名
選項(xiàng): g 表示全局替換  i 忽略字母大小寫  
# 替換1到3行中的陶淵明
sed -i '1,3s/陶淵明/李白/' 17_sed.txt
# 替換每行中所有陶淵明,加g選項(xiàng)
sed -i '1,3s/陶淵明/李白/g' 17_sed.txt

練習(xí)

每隔1秒,從1個(gè)文件中隨機(jī)取1行,在大屏幕上顯示
# 1. 文件的行數(shù),利用$RANDOM 想辦法取出隨機(jī)數(shù)
wc -l 17_sed.txt
sed -n '隨機(jī)數(shù)p' 
# 代碼實(shí)現(xiàn):
#!/bin/bash

file="17_sed.txt"

number=$(sed -n '$=' $file)
while :
do
        clear
        l=$[RANDOM%number+1]
        sed -n "${l}p" $file
        sleep 1
done

文件|目錄判斷示例

/home/tarena/libai
判斷路徑是否存在
不存在:創(chuàng)建
已存在:不做操作
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昔期,隨后出現(xiàn)的幾起案子菇绵,更是在濱河造成了極大的恐慌,老刑警劉巖镇眷,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬最,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡欠动,警方通過查閱死者的電腦和手機(jī)永乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來具伍,“玉大人翅雏,你說我怎么就攤上這事∪搜浚” “怎么了望几?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萤厅。 經(jīng)常有香客問我橄抹,道長(zhǎng),這世上最難降的妖魔是什么惕味? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任楼誓,我火速辦了婚禮,結(jié)果婚禮上名挥,老公的妹妹穿的比我還像新娘疟羹。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布榄融。 她就那樣靜靜地躺著参淫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愧杯。 梳的紋絲不亂的頭發(fā)上黄刚,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音民效,去河邊找鬼憔维。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畏邢,可吹牛的內(nèi)容都是我干的业扒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舒萎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼程储!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起臂寝,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤章鲤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咆贬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體败徊,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年掏缎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了皱蹦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眷蜈,死狀恐怖沪哺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酌儒,我是刑警寧澤辜妓,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站忌怎,受9級(jí)特大地震影響籍滴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呆躲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一异逐、第九天 我趴在偏房一處隱蔽的房頂上張望捶索。 院中可真熱鬧插掂,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至璃弄,卻和暖如春要销,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夏块。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工疏咐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脐供。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓浑塞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親政己。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酌壕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧?jiǎn)單介紹了一下什么是shell腳本,現(xiàn)在我們來進(jìn)一...
    LiWei_9e4b閱讀 1,571評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評(píng)論 0 5
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,095評(píng)論 0 0
  • 一歇由、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • 本文是對(duì)Linux shell編程的一個(gè)學(xué)習(xí)比較卵牍,共包括如下章節(jié)的內(nèi)容: 概述 基本語法 結(jié)構(gòu)化語句 函數(shù) 小結(jié) ...
    我是老薛閱讀 830評(píng)論 0 5