Shell脚本介绍

什么是Shell

shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管道命令与数据流重导向等功能,以达到我们所想要的处理目的。

简单的说,也就是可以使用一个普通的文本,写上多条 shell 命令,一起执行这些命令。
但是,在这个文件中可以添加一些逻辑判断什么的。

Shell脚本的规范

script 的功能;
script 的版本信息;
script 的作者与联络方式;
script 的版权宣告方式;
script 的 History (历史纪录);
script 内较特殊的指令,使用“绝对路径”的方式来下达;
script 运行时需要的环境变量预先宣告与设置。

脚本练习

[root@localhost ~]# vim start.sh

echo "显示磁盘分区"
lsblk
echo "*********************************"                  
echo "显示内存占用量"
free -h

sh start.sh     #sh 表示用shell运行

显示磁盘分区
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part 
  ├─centos-root 253:0    0   26G  0 lvm  /
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]
sr0              11:0    1  4.2G  0 rom  
显示内存占用量
              total        used        free      shared  buff/cache   available
Mem:           5.7G        170M        5.4G        8.6M        158M        5.3G
Swap:          3.0G          0B        3.0G
  如果内存占用过高 请运行ffm.sh
-----------------------------------------------------------
vim ffm.sh

echo 3 > /proc/sys/vm/drop_caches
echo "buffer/cache释放完"

[root@localhost ~]# sh ffm.sh 
buffer/cache释放完

执行脚本的方式

脚本(script)的默认变量

特殊变量

位置变量

位置变量是根据命令出现在命令行上的位置来确定的变量,在shell调用过程中,会按参数所在的位置进行调用。


判断表达式

$ touch a.txt
$ test -e a.txt;echo $?
0                             # 测试成功,命令返回值为 0

$ test -e s.txt;echo $?
1                             # 测试失败,命令返回值为 非 0

$ test -f a.txt;echo $?
0

$ test -d a.txt;echo $?
1
其他同理




$? 可以查看上一条命令是否执行成功

echo $?为0则没执行结果或未成功
echo $?为1则为成功

Shell的逻辑结构

一、if / fi判断

if [ 条件判断式 ] ;then
  当条件判断式成立时,执行的命令
fi #条件语句结束
----------------------------------
if [ 条件判断式 ] 
then
  当条件判断式成立时,执行的命令
fi #一样的
示例:
vim if-fi.sh

#!/bin/bash
read -p "input a number:" A
if [  "$A" = 10   ]
then
        echo "congratulations!”
fi
[root 03:37 AM t2sh ~]#sh if-fi.sh
input a number:10
congratulations!
-------------------------------------------
位置变量在if-elif中

二、if / else / fi判断

vim if-fi.sh

#!/bin/bash
read -p "input a number:" A
if [ "$A" = 10 ]
then
    echo "congratulations!"
else
    echo "wrong!"
fi

[root 03:38 AM t2sh ~]#sh if-fi.sh
input a number:1
wrong!
[root 03:38 AM t2sh ~]#sh if-fi.sh
input a number:10
congratulations!
---------------------------

三、if / elif / fi判断

vim if-fi.sh

#!/bin/bash
read -p "input a number:" A
if [ "$A" = 10 ]
then
    echo "congratulations!"
elif [ "$A" -gt 10   ]   #判断$A大于10
then    
    echo "too big!"
elif [ "$A" -lt 10   ]    #判断$A小于10
then
    echo "too little"
fi
 
[root 03:42 AM t2sh ~]#sh if-fi.sh
input a number:1
too little
[root 03:42 AM t2sh ~]#sh if-fi.sh
input a number:11
too big!
[root 03:43 AM t2sh ~]#sh if-fi.sh
input a number:10
congratulations!
---------------------------------------
echo "Press y to continue" 
read yn
if [ "$yn" = "y"  ]
then
        echo "process is continue·····"
else
        echo "process is STOP·····"
fi
------------------------------
进阶版 
ps aux |grep -v "grep"|grep "$1"|grep -v "sh.sh" > /dev/null   #一定要-v 文件名,因为位置变量会产生一个子进程
A=`echo $?`
if [ "$A" -eq 0 ]
then
 echo "process is running"
else
 echo "process is not exist"
fi


四、While do / done

while [  条件判断  ]
do
    条件满足时你要执行的语句
done
-----------------------
n=0    #赋值n=0
while [ "$n" -lt 5  ]  #判断n是否小于5,如果小于5执行do下面的语句
do
    let n++    #每次循环都会让n+1
    echo "$n"
done

[root 03:48 AM t2sh ~]#sh while.sh 
1
2
3
4
5

-----------------------------
if语句在while语句中循环

n=0
while [ "$n" -lt 5  ]
do
    let n++
echo "guess a number what i want"
read -p "input a number:" A
if [[ "$A" =~ [0-9] ]]
then
    if [ "$A" -gt 18  ]
    then
        echo "that's too big"

    elif [ "$A" -lt 18 ]
    then
        echo "that's too little"

    elif [ "$A" == 18 ]
    then
        echo "congratulations!"
        break
    fi
fi
done
echo "u have no choice!"

--------------------------------------
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容