day56 shell 基础使用

shell

1.什么是shell

shell是一个命令解释器, 将人类输入高级语言, 通过 Shell程序 转换为 二进制 .
shell分为两种使用方式:
交互: 登录 执行命令 退出
非交互: 执行某个文件, 文件中都是一推命令, 整个文件从上往下依次执行.

2.什么是shell脚本

  1. 将系统命令堆积在一起,顺序执行(简称: 系统命令堆积)
  2. 特定的格式 + 特定的语法 + 系统的命令 = 文件。 Shell脚本
    if for ...

3.shell脚本能做什么

标准:
1.安装方式一致
2.安装路径一致
3.目录结构一致
4.日志格式一致
5.脚本路径一致
能将平时操作脚本化,流程化,自动化 ITIL
ppt 人 流程 技术/工具
备份
监控
自动化上线
约束标准

4.shell脚本需要的预备知识

把单个命令堆积起来就叫shell脚本,不过还有一定的规范

5.shell脚本编写规范、执行方式

执行方式分为两种:
1.加执行权限 ./script_filename.sh(chown +x script_filename.sh )
2.通过bash直接翻译 bash script_filename.sh

添加命令解释器的几种方式:
#!/usr/bin/bash
#!/usr/bin/sh
#!/usr/bin/env bash
#!/usr/bin/env python

day01

1.什么是变量variables?

变量是shell中传递数据的一种方法。
简单理解: 就是用一个固定的字符串去表示不固定的值,便于后续引用。

2.定义变量规范

1.大写开头,后面小写或数字都ok
2.变量具体一定的含义
3.注意 变量的写法 仅支持 a=1 不支持 a = 1

3.自定义变量

var="hello world"
echo var echo{var}_log

* 和@ 的区别?

可以看到不加引号时,二者都是返回传入的参数,但加了引号后,此时*把参数作为一个字符串整体(单字符串)返回,@把每个参数作为一个字符串返回

##写入次文件,当打开一个XXX.sh文件,就又头信息
[root@m01 ~]# cat .vimrc 
set ignorecase
set cursorline
set autoindent
set nu
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
 if expand("%:e") == 'sh'
 call setline(1,"#!/bin/bash")
 call setline(2,"#")
 call setline(3,"#********************************************************************")
 call setline(4,"#Author:               一只刚刚开始吃猫粮的运维狗")
 call setline(5,"#QQ:                  2869192751")
 call setline(6,"#Date:                ".strftime("%Y-%m-%d"))
 call setline(7,"#FileName:            ".expand("%"))
 call setline(8,"#URL:                 https://www.caoweiqiang.cn")
 call setline(9,"#Description:         The test script")
 call setline(10,"#Copyright (C):      ".strftime("%Y")." All rights reserved")
 call setline(11,"#********************************************************************")
 call setline(12,"#")
 call setline(13,"")
endif
endfunc
autocmd BufNewFile * normal G

例题1:

通过位置传参方式, 创建 Linux 系统账户及密码,执行 var1.sh username password

[root@m01 shell]# cat shell05.sh 
#!/bin/bash
#*****************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            shell05.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#*****************************************************

#位置传参
useradd $1
echo "$2" | passwd --stdin $1

例题2:

通过位置传参方式, Linux 系统账户及密码,执行 var1.sh username password,控制最多传递两个参数。

[root@m01 111]# cat she01.sh 
#!/bin/bash
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            she01.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
if [ $# -ne 2 ];then
    echo "USAGE:$0 请传递两个参数 [ username | passwd ]"
    exit
fi
useradd $1
echo "$2" | passwd --stdin $1

read用法

例题1

使用read模拟Linux登陆页面。

[root@m01 scripts]# vim var8.sh 
  1 #!/bin/bash
  2 #
  3 #**************************************************************
    ******
  4 #Author:               一只刚刚开始吃猫粮的运维狗
  5 #QQ:                  2869192751
  6 #Date:                2019-10-28
  7 #FileName:            var8.sh
  8 #URL:                 https://www.caoweiqiang.cn
  9 #Description:         The test script
 10 #Copyright (C):      2019 All rights reserved
 11 #**************************************************************
    ******
 12 #
 13 
 14 
 15 echo "$(hostnamectl |awk -F ":" '/Operating System:/ {print $2}
    ')"
 16 echo "Kernel $(uname -r) on an $(uname -m)"
 17 
 18 read -p "$(hostname) Login: " acc
 19 read -s -t50 -p "Password: " pw
 20 echo ""
 21 echo "你输入的用户名: $acc      你输入的密码是: $pw" 

例题2

使用 read编写一个备份脚本,需要用户传递2个参数,源和目标。

[root@m01 scripts]# cat var9.sh 
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var9.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#
echo "----------请按照如下提示输入---------------"
read -p "请输入你要备份的源文件或者原文目录: " Soure
read -p "请输入你要备份的目录位置是哪里:" Dest
echo -e "\t你要备份的源是 Soure
        你要备份的目标是: Dest"
read -p "你确定要备份吗?[ y | n ] " Action
if [ $Action == "y" ];then
    cp -rpv $Soure $Dest
fi

例题3

使用read编写一个探测主机存活脚本,需要用户传递测试的IP地址。
1.提示用户输入IP地址
2.对用户输入的IP地址进行探测是否存活
3.判断探测结果是否成功
成功则输出成功的结果
失败则输出失败的结果

[root@m01 scripts]# cat var10.sh 
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var10.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#
read -p "请输入需要探测的IP地址: " ip
ping -w1 -c1 "$ip" $>/dev/null
if [ $? -eq 0 ];then
   echo "$ip" is ok....
else
   echo "$ip" is error.....
fi

例题4

使用read编写一个修改系统主机名称脚本。
1.打印当前的主机名称
2.提示用户输入新的主机名称
3.询问用户是否修改?
4.确定修改,执行修改命令
5.不确定修改,退出脚本

[root@m01 scripts]# cat var11.sh
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var11.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#
Hostname=$(hostname)
echo "当前主机名称是: ${Hostname}"
read -p "请输入新的主机名称:" new_host
read -p "你确定要将 ${Hostname} 变更为 ${new_host} 吗?[ y | n ]: " Action
if [ Action == "y" ];then
    hostname ${new_host}
    hostnamectl set-hostname ${new_host}
    echo "你的主机名称已经修改为 ${new_host}"
fi

4.用# ## % %% / //

[root@manager ~]# url=www.sina.com.cn
[root@manager ~]# echo $url
www.sina.com.cn
[root@manager ~]# echo $url | awk -F '.' '{print $2,$3,$4}'
sina com cn
[root@manager ~]# echo ${url}
www.sina.com.cn

------------#
[root@manager ~]# echo ${url#*.}        #从头开始匹配,最短匹配
sina.com.cn 
[root@manager ~]# echo ${url##*.}       #从头开始匹配,最长匹配
cn

------------%
[root@manager ~]# echo ${url%.*}
www.sina.com
[root@manager ~]# echo ${url%%.*}
www

-------------/
[root@manager ~]# echo ${url/c/C}
www.sina.Com.cn
[root@manager ~]# echo ${url//c/C}
www.sina.Com.Cn

例题1

如何替换 $PATH 中的/bin/替换为/BIN/

[root@manager ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@manager ~]# echo ${PATH//bin/BIN}

例题2

变量string="Bigdata process is Hadoop, Hadoop is open source project",执行脚本后,打印输出string变量,并给出用户以下选项:

1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
用户输入数字1|2|3|4,可以执行对应项的功能

[root@m01 scripts]# cat var12.sh
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var12.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#
string="Bigdata process is Hadoop, Hadoop is open source project"
echo "${string}"
echo "1)、打印string长度"
echo "2)、删除字符串中所有的Hadoop"
echo "3)、替换第一个Hadoop为Linux"
echo "4)、替换全部Hadoop为Linux"

read -p "请输入以下选项: [ 1 | 2 | 3 | 4 ] : " Action
if [ $Action -eq 1 ];then
    echo "${#string}"
fi

if [ $Action -eq 2 ];then
    echo "${string//Hadoop/}"
fi

if [ $Action -eq 3 ];then
    echo "${string/Hadoop/Linux}"
fi

if [ $Action -eq 4 ];then
    echo "${string//Hadoop/Linux}"
fi

例题3

查看内存/当前使用状态,如果使用率超过80%则报警发邮件,思路如下:
1.当前内存使用百分比是多少
2.进行判断比对
如果大于80% 则触发邮件
否则,over
已使用的内存 / 总内存 * 100 = 使用的百分比

[root@m01 scripts]# cat var14.sh
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var14.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#
df_use=$(free -h | grep "Mem" | awk ' {print $3/$2*100}')

if [ echo "${df_use%.*}\%" -gt 80 ];then

      echo "你的磁盘使用率过高..... ${df_use%.*}%"
else
      echo "你的磁盘可以正常使用......${df_use%.*}%"
fi

例题4

根据系统时间,打印今年和明年时间

[root@m01 scripts]# cat var15.sh
#!/bin/bash
#
#********************************************************************
#Author:               一只刚刚开始吃猫粮的运维狗
#QQ:                  2869192751
#Date:                2019-10-28
#FileName:            var15.sh
#URL:                 https://www.caoweiqiang.cn
#Description:         The test script
#Copyright (C):      2019 All rights reserved
#********************************************************************
#

Date=$(date +%Y)
echo "今年的时间是: ${Date}" 
echo "明年的时间是: $((${Date}+1))"

例题5

根据系统时间获取今年还剩下多少星期,已经过了多少星期。思路如下:
date +%j 已经过了多少天

一年有365天 已经过了 301 = 还剩下 365-301 = 64 / 7 = 还剩下多少周
已经过了 301 天 / 7 = 已经过了多少周

#!/bin/bash
Date=$(date +%j)

echo "今年已经过了 ${Date}   天"
echo "今年已经过了 $[ ${Date} /7 ] 周"
echo "今年还剩下 $[ ( 365 - ${Date} ) / 7 ]  周"
echo "从现在距离下一个新年还有  $[ 365 - ${Date} ]  天"

例题6

完成一个计算器功能: 传入2个值,然后对传入的值进行 加 减 乘 除,思路如下:
1.使用read让用户传值: 12
2.对传入的值进行运算:
3.输出对应的结果.

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