最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

3000字掃盲shell基礎(chǔ)知識(新手必備)

 更新時間:2020年06月25日 09:39:11   作者:Java小咖秀  
這篇文章主要介紹了3000字掃盲shell基礎(chǔ)知識,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

不論前端還是后端,再學(xué)會Linux的基礎(chǔ)上,還應(yīng)該學(xué)會寫一些簡單的Shell。不止是工作,日常中想做一些東西,如果手動做就很累人也費(fèi)時間,如果你會用Shell腳本處理就很簡單了,本文普及的shell的一些基礎(chǔ)知識。后面還會持續(xù)更新。

shell基礎(chǔ)語法之變量

shell 變量命名

  • 變量只能由大小寫字母,數(shù)字和下劃線組成。
  • 變量名稱不能以數(shù)字開頭。
  • 變量可以存儲數(shù)字類型或者字符串類型。
  • 變量賦值等號兩邊不能有空格。
  •  字符串的變量可以用單引號或者雙引號括起來。

定義變量:

➜ ~ name="xiaoka"
➜ ~ age=2

無效的定義
[

root@iz2ze0ajic0vbv28hcdctpz hello]# 1212=sfds
-bash: 1212=sfds: 未找到命令
[root@iz2ze0ajic0vbv28hcdctpz hello]# ?aasd=hehe
-bash: ?aasd=hehe: 未找到命令

shell 變量調(diào)用

變量的調(diào)用使用$符號或者$符號加上花括號。一般來講使用花括號的用法。

舉例說明:

[root@iz2ze0ajic0vbv28hcdctpz hello]# apple=hongfushi
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $applepen

[root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${apple}pen
hongfushipen

如果不加花括號,就會讀成applepen為一個變量,因此解析產(chǎn)生了歧義。

shell 變量分類

  • 環(huán)境變量:保存操作系統(tǒng)運(yùn)行時使用的參數(shù)。
  • 位置變量:傳遞腳本參數(shù)時使用。
  • 預(yù)定義變量:類似于環(huán)境變量,不同是它是不能重定義的。
  • 自定義變量:由用戶自定義,可用于用戶編寫的腳本。

自定義變量:

定義變量database:

[root@iz2ze0ajic0vbv28hcdctpz hello]# database=mysql

[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $database
mysql
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${database}
mysql

環(huán)境變量:查看全局環(huán)境變量:

[root@iz2ze0ajic0vbv28hcdctpz ~]# printenv
XDG_SESSION_ID=2044
HOSTNAME=iz2ze0ajic0vbv28hcdctpz
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=113.44.42.209 56074 22
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAVEN_HOME=/usr/local/apache-maven-3.6.0
MAIL=/var/spool/mail/root
PATH=/usr/local/apache-maven-3.6.0/bin:/usr/local/jdk1.8.0_191/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
JAVA_HOME=/usr/local/jdk1.8.0_191
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
CLASSPATH=.:/lib/dt.jar:/lib/tools.jar
SSH_CONNECTION=113.44.42.209 56074 172.17.187.244 22
LC_CTYPE=zh_CN.UTF-8
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/printenv

定義一個環(huán)境變量

[root@iz2ze0ajic0vbv28hcdctpz ~]# export kaka="kaka"
[root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka
kaka=kaka

刪除環(huán)境變量

[root@iz2ze0ajic0vbv28hcdctpz ~]# unset kaka
[root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka

w如果長期使用,可以把它們寫在配置文件中。/etc/profile 或者 用戶家目錄的.bash_profile

位置變量 :

我們先定義一個shell。

[root@iz2ze0ajic0vbv28hcdctpz ~]# cat test.sh
#!/bin/bash

echo "執(zhí)行的文件: $0"
echo "第一個參數(shù): $1"
echo "第二個參數(shù): $2"

執(zhí)行查看結(jié)果。

[root@iz2ze0ajic0vbv28hcdctpz ~]# chmod +x test.sh
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
執(zhí)行的文件: ./test.sh
第一個參數(shù): 1
第二個參數(shù): 2

預(yù)定義變量:

常用的預(yù)定義變量有如下幾個。

#!/bin/bash

echo "執(zhí)行的文件: $0"
echo "第一個參數(shù): $1"
echo "第二個參數(shù): $2"
echo "所有參數(shù): $*"
echo "當(dāng)前腳本的pid: $"
echo "腳本參數(shù)個數(shù): $#"

查看執(zhí)行結(jié)果

[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
執(zhí)行的文件: ./test.sh
第一個參數(shù): 1
第二個參數(shù): 2
所有參數(shù): 1 2
當(dāng)前腳本的pid: 30170
腳本參數(shù)個數(shù): 2

查看上一個命令執(zhí)行結(jié)果。

[root@iz2ze0ajic0vbv28hcdctpz hello]# ls
test
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $?
0

shell 運(yùn)算符

shell也是一門語言其實(shí)和其他的語言運(yùn)算符大同小異,不過這里我們還是來說一下。本節(jié)說一下運(yùn)算符相關(guān)內(nèi)容。

運(yùn)算符種類

  • 算數(shù)運(yùn)算符
  • 關(guān)系運(yùn)算符
  • 布爾運(yùn)算符
  • 邏輯運(yùn)算符
  • 字符串運(yùn)算符
  • 文件測試運(yùn)算符

算數(shù)運(yùn)算符

命令: expr
作用:   求表達(dá)式的值
語法:    expr 表達(dá)式
規(guī)則:

  • ​    運(yùn)算符號兩邊要有空格
  • 遇到特殊符號如*號需要在前面加反斜杠
  • 空格和特殊字符串需要用引號括起來

操作:(先編寫一個運(yùn)算相關(guān)的shell腳本)

#!/bin/bash
i=1
j=2
addition=`expr $i + $j`
subtraction=`expr $i - $j`
multiplication=`expr $j \* $j`
division=`expr $j / $i`
mod=`expr $j % $i`
echo "addition=${addition} , subtraction=${subtraction} , multiplication=${multiplication} , division=${division} , mod=${mod}"

if [ $i == $j ]
then
 echo "i 等于 j"
fi

if [ $i != $j ]
then
 echo "i 不等于 j"
fi

查看結(jié)果:

➜  ~ ./operation.sh
addition=3 , subtraction=-1 , multiplication=4 , division=2 , mod=0
i 不等于 j

關(guān)系運(yùn)算符

操作:(編寫腳本)

#!/bin/bash
num1=5
num2=8
if [ $num1 -eq $num2 ]
then
 echo "$num1 是否等于 $num2 : num1 等于 num2"
else
 echo "$num1 是否等于 $num2: num1 不等于 num2"
fi
if [ $num1 -ne $num2 ]
then
 echo "$num1 是否不等于 $num2: num1 不等于 num2"
else
 echo "$num1 是否不等于 $num2 : num1 等于 num2"
fi
if [ $num1 -gt $num2 ]
then
 echo "$num1 是否大于 $num2: num1 大于 num2"
else
 echo "$num1 是否大于 $num2: num1 不大于 num2"
fi
if [ $num1 -lt $num2 ]
then
 echo "$num1 是否小于 $num2: num1 小于 num2"
else
 echo "$num1 是否小于 $num2: num1 不小于 num2"
fi
if [ $num1 -ge $num2 ]
then
 echo "$num1 是否大于等于 $num2: num1 大于或等于 num2"
else
 echo "$num1 是否大于等于 $num2: num1 小于 num2"
fi
if [ $num1 -le $num2 ]
then
 echo "$num1 是否小于等于 $num2: num1 小于或等于 num2"
else
 echo "$num1 是否小于等于 $num2: num1 大于 num2"
fi

操作結(jié)果:

➜  ~ ./relation.sh
5 是否等于 8: num1 不等于 num2
5 是否不等于 8: num1 不等于 num2
5 是否大于 8: num1 不大于 num2
5 是否小于 8: num1 小于 num2
5 是否大于等于 8: num1 小于 num2
5 是否小于等于 8: num1 小于或等于 num2

布爾運(yùn)算符

編寫腳本:

#!/bin/bash
num1=3
num2=23
if [ $num1 != $num2 ]
then
 echo "$num1 != $num2 : num1 不等于 num2"
else
 echo "$num1 != $num2: num1 等于 num2"
fi
if [ $num1 -lt 25 -a $num2 -gt 15 ]
then
 echo "$num1 小于 25 且 $num2 大于 15 : 返回 true"
else
 echo "$num1 小于 25 且 $num2 大于 15 : 返回 false"
fi
if [ $num1 -lt 25 -o $num2 -gt 25 ]
then
 echo "$num1 小于 25 或 $num2 大于 25 : 返回 true"
else
 echo "$num1 小于 25 或 $num2 大于 25 : 返回 false"
fi

查看結(jié)果:

➜  ~ ./bool.sh
3 != 23 : num1 不等于 num2
3 小于 25 且 23 大于 15 : 返回 true
3 小于 25 或 23 大于 25 : 返回 true

字符串運(yùn)算符

編寫腳本:

#!/bin/bash
apple="apple"
pen="pen"

if [ $apple = $pen ]
then
 echo "$apple = $pen : apple 等于 pen"
else
 echo "$apple = $pen: apple 不等于 pen"
fi
if [ $apple != $pen ]
then
 echo "$apple != $pen : apple 不等于 pen"
else
 echo "$apple != $pen: apple 等于 pen"
fi
if [ -z $apple ]
then
 echo "-z $apple : 字符串長度為 0"
else
 echo "-z $apple : 字符串長度不為 0"
fi
if [ -n "$apple" ]
then
 echo "-n $apple : 字符串長度不為 0"
else
 echo "-n $apple : 字符串長度為 0"
fi
if [ $apple ]
then
 echo "$apple : 字符串不為空"
else
 echo "$apple : 字符串為空"
fi

執(zhí)行結(jié)果:

[root@iz2ze0ajic0vbv28hcdctpz ~]# ./string.sh
apple = pen: apple 不等于 pen
apple != pen : apple 不等于 pen
-z apple : 字符串長度不為 0
-n apple : 字符串長度不為 0
apple : 字符串不為空

邏輯運(yùn)算符

編寫腳本:

#!/bin/bash
num1=5
num2=8
if [[ $num1 -lt 10 && $num2 -gt 5 ]]
then
 echo "返回 true"
else
 echo "返回 false"
fi

if [[ $num1 -lt 10 || $num2 -gt 5 ]]
then
 echo "返回 true"
else
 echo "返回 false"
fi

執(zhí)行結(jié)果:

[root@iz2ze0ajic0vbv28hcdctpz ~]# ./logic.sh
返回 true
返回 true

文件測試運(yùn)算符

編寫腳本:

~ cat testfile.sh
#!/bin/bash

file="/root/testfile.sh"

if [ -r $file ]
then
 echo "該文件可讀"
else
 echo "該文件不可讀"
fi
if [ -x $file ]
then
 echo "該文件可執(zhí)行"
else
 echo "該文件不可執(zhí)行"
fi
if [ -w $file ]
then
 echo "該文件可寫"
else
 echo "該文件不可寫"
fi

if [ -f $file ]
then
 echo "該文件是普通文件"
else
 echo "該文件是非普通文件"
fi

if [ -s $file ]
then
 echo "該文件為空"
else
 echo "該文件不為空"
fi
if [ -d $file ]
then
 echo "該文件是目錄"
else
 echo "該文件不是目錄"
fi

執(zhí)行腳本:

➜  ~ ./testfile.sh
該文件可讀
該文件可執(zhí)行
該文件可寫
該文件是普通文件
該文件為空
該文件不是目錄

shell條件判斷&流程控制

其實(shí)流程控制的本質(zhì)是差不多的,只是在語法上稍微有些差別,本節(jié)我們來盤一盤。

單分支if

流程示意圖:

舉例:

➜ if cat if-one.sh
#!/bin/bash
a=10

if [ a > 5 ]
then
 echo "a 大于 5"
fi

執(zhí)行結(jié)果:

➜  if ./if-one.sh
a 大于 5

雙分支if

流程示意圖:

舉例:

➜ if cat if-double.sh
#!/bin/bash
age=18
if [ $age -ge 18 ]; then
 echo "成年"
else
 echo "未成年"
fi

執(zhí)行結(jié)果:

➜  if ./if-double.sh
成年

多分支if語句

流程示意圖:

舉例:

➜ if cat if-multi.sh
#!/bin/bash
money=10
if [ $money -lt 1 ]
then
 echo "1塊錢都沒有的比皮卡丘決定在家吃土"
elif [ $money -ge 1 -a $money -lt 5 ]
then
 echo "老板我要大白兔奶糖"
elif [ $money -ge 5 -a $money -le 10 ]
then
 echo "老板我要巧克力"
else
 echo "老板給我拿個雞腿"
fi

執(zhí)行結(jié)果:

➜  if ./if-multi.sh
老板我要巧克力

到此這篇關(guān)于3000字掃盲shell基礎(chǔ)知識的文章就介紹到這了,更多相關(guān)shell入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell?AWK編程的基本介紹和使用詳解

    Shell?AWK編程的基本介紹和使用詳解

    AWK可以看成一門獨(dú)立的語言,它擁有語言的基本特征,換句話說AWK可以寫出極其繁瑣和復(fù)雜的程序,AWK的語法比Shell的語法還難以接收,這篇文章主要介紹了Shell?AWK編程的介紹和基本使用,需要的朋友可以參考下
    2022-06-06
  • linux rsync同步命令(值得收藏)

    linux rsync同步命令(值得收藏)

    本文給大家介紹linux 同步利器rsync,今天給大家介紹我從這個工具中看到的同步藝術(shù),感興趣的朋友一起通過本文學(xué)習(xí)吧
    2015-11-11
  • shell實(shí)現(xiàn)自動備份mysql、整站數(shù)據(jù)的兩個腳本分享

    shell實(shí)現(xiàn)自動備份mysql、整站數(shù)據(jù)的兩個腳本分享

    這篇文章主要介紹了shell實(shí)現(xiàn)自動備份mysql、整站數(shù)據(jù)的兩個腳本分享,使用了cron實(shí)現(xiàn)實(shí)現(xiàn)定時備份,并會自動刪除N天前的備份,以及自動FTP上傳到別的服務(wù)器,需要的朋友可以參考下
    2014-06-06
  • ssh expect自動登錄的腳本代碼

    ssh expect自動登錄的腳本代碼

    ssh遠(yuǎn)程登錄,每次都要指定一堆用戶名和密碼,現(xiàn)要求實(shí)現(xiàn)自動登錄
    2013-02-02
  • linux shell判斷字符串為空的正確方法示例

    linux shell判斷字符串為空的正確方法示例

    這篇文章主要給大家介紹了關(guān)于linux shell判斷字符串為空的正確方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用linux shell具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 如何在Linux下修改Mysql的用戶(root)密碼

    如何在Linux下修改Mysql的用戶(root)密碼

    這篇文章主要介紹了如何在Linux下修改Mysql的用戶(root)密碼,分兩種情況:第一種當(dāng)擁有原來的mysql的root密碼,第二種情況忘記原來的mysql的root的密碼,需要的朋友可以參考下
    2015-08-08
  • Linux Shell Map的用法詳解

    Linux Shell Map的用法詳解

    這篇文章主要介紹了Linux Shell Map的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 一些Linux Shell中的權(quán)限相關(guān)知識總結(jié)

    一些Linux Shell中的權(quán)限相關(guān)知識總結(jié)

    這篇文章主要介紹了一些Linux Shell中的權(quán)限相關(guān)知識總結(jié),使Linux入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • 監(jiān)控網(wǎng)站是否可以正常打開的Shell腳本分享

    監(jiān)控網(wǎng)站是否可以正常打開的Shell腳本分享

    這篇文章主要介紹了監(jiān)控網(wǎng)站是否可以正常打開的Shell腳本分享,可以指定N個網(wǎng)址,放在crontab中執(zhí)行,需要的朋友可以參考下
    2014-09-09
  • 簡單的Linux查找后門思路和shell腳本分享

    簡單的Linux查找后門思路和shell腳本分享

    這篇文章主要介紹了簡單的Linux查找后門思路和shell腳本分享,本文的方法相對簡單,提了一個思路和簡單的Shell實(shí)現(xiàn)腳本,需要的朋友可以參考下
    2014-06-06

最新評論

察雅县| 凤翔县| 黄骅市| 当阳市| 新丰县| 南木林县| 锡林郭勒盟| 都江堰市| 浏阳市| 嘉禾县| 田阳县| 大宁县| 喜德县| 龙江县| 深圳市| 游戏| 普格县| 大安市| 新龙县| 天镇县| 安丘市| 尼勒克县| 桂东县| 凉山| 微山县| 腾冲县| 逊克县| 威远县| 玉树县| 榆林市| 中西区| 哈密市| 涿鹿县| 华安县| 晋江市| 万源市| 嘉黎县| 遵义县| 阳西县| 安福县| 福州市|