IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell脚本初步入门 -> 正文阅读

[系统运维]shell脚本初步入门

一、 简单介绍shelll

1.为什么要学习shell

  • ? 提高工作效率
  • ? 自动化管理
  • ? 减少重复的工作
  • ? 安装操作系统
  • ? 系统优化 SSH 关闭SElinux 关闭iptables 内核参数优化等
  • ? 安装服务
  • ? 服务的配置
  • ? 启动服务
  • ? 日志统计(三剑客)、日志切割,ELK
  • ? 监控zabbix cacti流量 nagions 交换路由

2.学习shell 编程所掌握的基础知识

  • 常用的Linux基础命令
  • 熟练掌握vim 多练
  • 三剑客(sed grep awk)

例如:

查找当前目录下的所有文件

[root@rac19c1 zmysh]$find . -type f
[root@rac19c1 ini]$ll -R | grep ^-

查Ip

[root@rac19c1 ini]$ip add |grep eth0 |awk 'NR==2{print $2}'
10.0.0.200/8

3.如何学好shell编程

  • 环境变量基础知识
  • if判断
  • for循环
  • while循环
  • case语句
  • 函数
  • 数组
  • 流程控制语句 continue break exit

基础语法必须掌握,自己总结,不断的练习

4.shell脚本初步入门

1.什么是shell

命令解释器,解释我们输入的命令或者脚本。

**交互式模式:**终端等待我们输入命令,输入命令,执行我们所输入的命令并且把结果反馈给我们,关闭终端,终端

非交互模式: 他会去执行我们所写好的命令放入到文本里。执行到最后一条,shell退出。

2.什么 是shell脚本

把能在命令执行的命令放在一个文件里,这就是shell脚本。包含了判断语句,循环语句,数组函数等待。

3.创建shell脚本规范

1.脚本必须放在同一个目录/server/scripts

2.脚本的开头必须写解释器

3.脚本名称的结尾必须以.sh结尾

4.脚本中写注释作者的名字创建时间 Author lzy create time 2018.11.26

5.成对的符号一次性书写完毕 “” ‘’ {} [] ``

6.循环语句一次性书写完毕 for i in ;do ;done

7.注释尽量不使用中文

8.内容缩进

例如:

#Author  zmy

#create  time 2018.11.26

#cut log 

#qq 邮件

二、shell变量核心基础知识

1.什么是变量

x=1 y+x=1 x变量名 =赋值 变量的值

永久性环境变量: /etc/profile

临时新环境变量 : export 直接声明

2.自定义环境变量

包含了字母、下划线和数字,建议以字母或者下划线开头,等号两边不能有空格,见名字知其意

如:

zmy_age=18 第一种写法

Zmy_Age=18 大驼峰

zmy_Age=18 小驼峰

ZMY_AGE=18 全部大写

3.三种变量定义方式

1.字符串如何定义 zmy=“test” 默认加双引号

2.数字如何定义 zmy=18

3.命令如何定义 zmy=date zmy=$(date)

4.shell脚本的重要位置参数

$0脚本的名称,则获取的是全路径名称 加上basename 就不会显示
$n脚本的第几个参数
$#获取脚本传参的总个数
$*获取脚本的所有参数,如果不加双引号和$@相同,如果加上双引号,获取的是一个整体
$@获取传参的所有参数,如果不加双引号和$*相同,如果加上双引号,则获取的为单个参数
$?上一条命令的执行结果,0成功,非0失败
$$获取脚本的PID,当系统执行多个shell脚本时使用
$!获取上一个脚本的PID

例1:$0 $n的用法

脚本

# !/bin/sh
zmy=test
echo $zmy  is ok
echo $0
echo $1 $2 $3
echo $#
~               

运行结果 $0当前脚本所在位置 $1 1个参数 $2 两个参数 $3 3个参数

[root@zmy test]$sh  test.sh zmy  ltt ta
test is ok
test.sh
zmy ltt ta
3

例2:$#的用法

脚本:

# !/bin/sh

zmy=test
if [ $# -ne 2 ];then
echo "USAGE: $0 参数1  参数2 "
exit 1
fi
echo $zmy  is ok
echo $0
echo $1 $2 $3
echo $#

结果:

[root@zmy test]$sh  test.sh 
USAGE: test.sh 参数1  参数2 
[root@zmy test]$sh  test.sh 1 2
test is ok
test.sh
1 2

注意: exit 1 是为了方便程序出错时 echo $? 可以快速定位到是那一个判断语句出现问题。

例3 ? 和 *和 ?@的区别

set – "I am " zhengmingyu teacher 模拟传参

[root@zmy test]$set -- "I am " zhengmingyu  teacher
[root@zmy test]$for i in $* ; do echo $i ;done
I
am
zhengmingyu
teacher
[root@zmy test]$for i in $@ ; do echo $i ;done
I
am
zhengmingyu
teacher

结果 : 不加双引号是相同的

加双引号:

[root@zmy test]$for i in "$*" ; do echo $i ;done
I am zhengmingyu teacher
[root@zmy test]$for i in "$@" ; do echo $i ;done
I am
zhengmingyu
teacher

结果: 加双引号 ? 会 把 所 有 参 数 当 成 一 个 整 体 输 出 , * 会把所有参数当成一个整体输出, ?@是一个参数一个参数输出

例4 $? 在脚本中的用法

#! /bin/sh
ping -c 1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
echo "网络不通"
else
echo "网络通畅"
fi

sh -x 脚本 可以看到脚本的执行过程

例5: $$ 获取脚本的PID

脚本:

[root@zmy test]$vim test.sh 
# !/bin/sh
zmy=test
echo $zmy  is ok
echo $0
echo $1 $2
echo $$
sleep 60
echo $#

结果:

[root@zmy test]$sh  test.sh 
test is ok
test.sh

16020
0
[root@zmy ~]$ps -aux |grep 16020
root      16020  0.0  0.0 113284  1208 pts/4    S+   16:26   0:00 sh test.sh
root      16063  0.0  0.0 112824   988 pts/0    R+   16:26   0:00 grep --color=auto 16020

5.shell 变量传参

1.read -p “” 参数

第一种变量传参 单个参数:

# !/bin/sh
read -p "please input num: " a
echo $a

结果:

[root@zmy ~]$sh  test3.sh
please input num: zmy
zmy

多个参数空格隔开

[root@zmy ~]$vim test3.sh
# !/bin/sh
read -p "please input num: " a b
echo $a
echo $b       

结果

[root@zmy ~]$sh  test3.sh 2 3
please input num: 2 3
2
3

2.第二种变量传参

#---第二种变量传参-----------
c=$1
d=$2
echo $1
echo $2

结果:

[root@zmy ~]$sh  test3.sh  zmy ltt
zmy
ltt

3.第三种变量传参

echo $1 $2

6.变量的字串删除和替换

变量切片

[root@zmy ~]$name="zmy is teacher"
[root@zmy ~]$echo $name
zmy is teacher
[root@zmy ~]$echo ${#name}     #显示长度
14 
[root@zmy ~]$echo ${name:1}   后面跟数字就是剪切第几位
my is teacher
[root@zmy ~]$echo ${name:2}
y is teacher
[root@zmy ~]$echo ${name:2:2} 剪切前2位到后两位
y
[root@zmy ~]$echo ${name:2:3}
y i

扩展1:wc -L 取变量的长度

[root@zmy ~]$echo ${name}|wc -L
14

扩展2:awk 取变量的长度

[root@zmy ~]$echo ${name}|awk '{print length}'
14

取小于长度3的字符串

方法 一

[root@zmy ~]$echo $name |xargs -n1|awk '{if(length<3) print}'
is

方法二

[root@zmy ~]$vim test4.sh
  1 # !/bin/sh
  2 for i in zmy is teacher
  3 do
  4 if [ ${#i} -lt 3 ]; then
  5 echo $i
  6 fi
  7 done

#切片

两个##表示贪婪匹配

从前面往后面删除变量内容

[root@zmy ~]$url=www.sina.com.cn
[root@zmy ~]$echo ${url#*.}
sina.com.cn
[root@zmy ~]$echo ${url##*.}
cn

从后面往前删除环境变量

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

[root@zmy ~]$echo ${url%%.*}
www

7.字符串替换

[root@zmy server]#: echo ${url/com/zmy}
www.baidu.zmy
//贪婪匹配
[root@zmy server]#: echo ${url//w/d}
ddd.baidu.com.cn

8.变量自增

[root@zmy server]#: a=1
[root@zmy server]#: b=1
[root@zmy server]#: let c=a++           # a++ 先执行后执行+1操作。    ++a:++a先执行加1操作。
                                       
[root@zmy server]#: let d=++b
[root@zmy server]#: echo $c
1
[root@zmy server]#: echo $d
2
[root@zmy server]#: let x=a+1
[root@zmy server]#: echo $x              #因为a自增过一次  所以是3
3


案例:使用脚本进行变量自增

脚本

#!bin/sh
IP=192.168.182.129
i=1
while [ $i -le 3 ]
do
ping -c 1  $IP &>/dev/null
if [ $? -eq 0  ] ;then
echo "$IP is ok "
fi
let i++
done

运行结果:

[root@zmy script]#: sh IpTest.sh 
192.168.182.129 is ok 
192.168.182.129 is ok 
192.168.182.129 is ok

9.数值运算

1.交给bc运算

yum -y install bc 支持小数运算

[root@zmy script]#: echo 1+2|bc
3

2.expr用法

[root@zmy script]#: expr 1 + 2
3
[root@zmy script]#: expr 1 \* 2
2

*注意: 1 2之间必须有空格 需要转义

也可以用$取值运算

[root@zmy script]#: a=1
[root@zmy script]#: b=2
[root@zmy script]#: echo $a+$b|bc
3
[root@zmy script]#: expr $a + $b
3

3.(())运算 只支持整数运算

[root@zmy script]#: echo $((1+2))
3

注意:echo $[1+2] 和(())一样 但是效率没有(())的高

取随机数1-100之间

[root@zmy script]#: echo $((RANDOM%100+1))
70

4.let运算

[root@zmy script]#: let sum=1+1
[root@zmy script]#: echo $sum
2

5.awk数值运算

支持小数运算

[root@zmy script]#: awk BEGIN'{print 1+2}'
3
[root@zmy script]#: echo 1 2|awk '{print $1+$2}'
3
[root@zmy script]#: awk BEGIN'{print 1.2*2}'
2.4

三、shell条件测试

1.test文件测试

[ -e dirfile ]存在则为真

[ -d dir ]目录是否存在

[ -f file ]文件是否存在

[ -x file ]文件是否具有可执行权限

[ -w file ]文件是否具有写权限

常用测试:

[root@zmy script]#: [ -f /etc/passwd ] && echo ok ||echo err
ok
// 取反
[root@zmy script]#: [ !-f /etc/passwd ] && echo ok ||echo err
err

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:22:22  更:2021-11-24 08:23:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:34:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码