shell是一个命令解释器, 将人类输入高级语言, 通过 Shell程序 转换为 二进制、
? 交互: 登录 执行命令 退出
? 非交互: 执行某个文件, 文件中都是一推命令, 整个文件从上往下依次执行
(1) 将系统命令堆积在一起,顺序执行(简称: 系统命令堆积
(2) 特定的格式 + 特定的语法 + 系统的命令 = 文件
标准:
1.安装方式一致
2.安装路径一致
3.目录结构一致
4.日志格式一致
5.脚本路径一致
6.能将平时操作脚本化,流程化,自动化 ITIL
ppt 人 流程 技术/工具
备份
监控
自动化上线
约束标准
? 1.加执行权限 ./script_filename.sh
? 2.通过bash直接翻译 bash script_filename.sh
问题: #!/usr/bin/bash 加与不加区别在哪?
1.如果你明确清楚这是一个什么类型的脚本,直接调用对应的解释器执行,没有影响?
2.如果你不清楚是什么类型的脚本, 直接使用./执行,那么会读取该脚本的第一行
如果第一行是#!/usr/bin/bash 或者 没有写该行,那么都将使用默认的bash翻译
问题: 如果我是一个python脚本,没有写开头,那么执行一定会报错
因为默认查找的是bash解释器,而我的文件需要用python解释器来翻译.
添加命令解释器的几种方式:
#!/usr/bin/bash
#!/usr/bin/sh
#!/usr/bin/env bash
#!/usr/bin/env python
变量是shell中传递数据的一种方法。
简单理解: 就是用一个固定的字符串去表示不固定的值,便于后续引用。
? 1.大写开头,后面小写或数字都ok
? 2.变量具体一定的含义
? 3.注意 变量的写法 仅支持 a=1 不支持 a = 1
? var="hello world"
? echo $var
? **echo ${var}_log**
可以看到不加引号时,二者都是返回传入的参数,但加了引号后,此时\(*把参数作为一个字符串整体(单字符串)返回,\)@把每个参数作为一个字符串返回
[root@ansible /scripts/User]# cat var01.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var01.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
useradd $1
echo "$2"|passwd --stdin $1
[root@ansible /scripts/User]sh var01.sh old3 1234
[root@ansible /scripts/User]# cat var02.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var02.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
if [ $# -ne 2 ];then
echo "USAGE: $0 请传递两个参数[username|password]" exit
fi
useradd $1
echo $2|passwd --stdin $1
[root@ansible /scripts/User]# sh var02.sh oldxu4 12345
[root@ansible /scripts/User]# cat var03.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var03.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "$(hostnamectl |awk -F ":" '/Operating System:/ {print $2}')"
echo "Kernel $(uname -r) on an $(uname -m)"
read -p "$(hostname) Login: " acc
read -s -t50 -p "Password: " pw
echo ""
echo "你输入的用户名: $acc 你输入的密码是: $pw"
[root@ansible /scripts/User]# sh var03.sh
[root@ansible /scripts/User]# cat var04.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var04.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "--------按照提示进行操作-------------"
read -p "请输入你要备份的源文件或者源目录: " Source
read -p "请输入你要备份的目录位置是哪里: " Dest
echo -e "\t你要输入的源文件为 $Source"
echo -e "\t你要输入的目标文件为 $Dest"
read -p "你确定要拷贝吗?[y|n]" action
if [ $action == y ];then
cp -rp $Source $Dest
fi
[root@ansible /scripts/User]# sh var04.sh
? 1.提示用户输入IP地址
? 2.对用户输入的IP地址进行探测是否存活
? 3.判断探测结果是否成功
? 成功则输出成功的结果
? 失败则输出失败的结果
[root@ansible /scripts/User]# cat var05.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var05.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "-------按照提示进行操作----------"
read -p "请输入你的ip地址" ip
ping -W1 -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is ok"
else
echo "$ip is error"
fi
[root@ansible /scripts/User]# sh var05.sh
-------按照提示进行操作----------
请输入你的ip地址10.0.0.51
10.0.0.51 is error
? 1.打印当前的主机名称
? 2.提示用户输入新的主机名称
? 3.询问用户是否修改?
? 4.确定修改,执行修改命令
? 5.不确定修改,退出脚本
[root@ansible /scripts/User]# cat var06.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var06.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "---------按照提示进行操作----------"
echo "当前的主机名为$(hostname)"
read -p "将主机名要修改为 $new_host" new_host
read -p "是否修改主机名[y|n]" action
if [ $action == y ];then
hostnamectl set-hostname $new_host
echo "你的主机名已经修改为 $new_host"
fi
[root@ansible /scripts/User]# sh var06.sh
---------按照提示进行操作----------
当前的主机名为ansbile
将主机名要修改为 ansible
是否修改主机名[y|n]y
你的主机名已经修改为 ansible
[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
[root@ansible /scripts/User]# echo "${PATH//bin/BIN}"
(1)、打印string长度
(2)、删除字符串中所有的Hadoop
(3)、替换第一个Hadoop为Linux
(4)、替换全部Hadoop为Linux
用户输入数字1|2|3|4,可以执行对应项的功能
[root@ansible /scripts/User]# cat var07.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var07.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
string="Bigdata process is Hadoop, Hadoop is open source project"
echo "(1)、打印string长度"
echo "(2)、删除字符串中所有的Hadoop"
echo "(3)、替换第一个Hadoop为Linux"
echo "(4)、替换全部Hadoop为Linux"
echo "用户输入数字1|2|3|4,可以执行对应项的功能"
read -p "请输入数字" number
if [ $number -eq 1 ];then
echo "它的长度为 ${#string}"
fi
if [ $number -eq 2 ];then
echo "${string//Hadoop/}"
fi
if [ $number -eq 3 ];then
echo "${string/Hadoop/Linux}"
fi
if [ $number -eq 4 ];then
echo "${string//Hadoop/Linux}"
fi
sh var07.sh
(1)、打印string长度
(2)、删除字符串中所有的Hadoop
(3)、替换第一个Hadoop为Linux
(4)、替换全部Hadoop为Linux
用户输入数字1|2|3|4,可以执行对应项的功能
? 1.当前内存使用百分比是多少
? 2.进行判断比对
? 如果大于80% 则触发邮件
? 否则,over
? 已使用的内存 / 总内存 * 100 = 使用的百分比
[root@ansible /scripts/User]# vim var08.sh
1 #!/bin/bash
2 #*****************************************
3 #name: baozexu
4 #QQ: 2897374243
5 #Date: 2019-10-28
6 #FileName: var08.sh
7 #URL: https://www.baozexu.com
8 #Description:
9 #*****************************************
10 mem_free=$(free -m|awk 'NR==2{print $3/$2*100}')
11 echo "当前内存的百分比为${mem_free}"
12 if [ ${mem_free%.*} -ge 5 ];then
13 echo "你的内存已超标 目前的状态是$mem_free"
14 fi
[root@ansible /scripts/User]# sh var08.sh
当前内存的百分比为12.963
你的内存已超标 目前的状态是12.963
[root@ansible /scripts/User]# cat var09.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var09.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "今年的时间为$(date +%Y)"
echo "明年的时间为$(($(date +%Y)+1))"
[root@ansible /scripts/User]# sh var09.sh
今年的时间为2019
明年的时间为2020
date +%j 已经过了多少天
一年有365天 已经过了 301 = 还剩下 365-301 = 64 / 7 = 还剩下多少周
已经过了 301 天 / 7 = 已经过了多少周
[root@ansible /scripts/User]# cat var010.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var010.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
Date=$(date +%j)
echo "已经过了 ${Date}天"
echo "已经过了$(( ${Date}/7))周"
echo "还剩下$[ (365-${Date})/7]周"
[root@ansible /scripts/User]# sh var010.sh
已经过了 301天
已经过了43周
还剩下9周
? 1.使用read让用户传值: $1 $2
? 2.对传入的值进行运算:
? 3.输出对应的结果.
[root@ansible /scripts/User]# cat var011.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var011.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
echo "欢迎使用计算机"
read -p "请输入你的值 " number
read -p "请输入你的值 " num
echo "$number+$num=$((number+num))"
echo "$number-$num=$((number-num))"
echo "$number*$num=$((number*num))"
echo "$number/$num=$((number/num))"
[root@ansible /scripts/User]# sh var011.sh
欢迎使用计算机
请输入你的值 1
请输入你的值 2
1+2=3
1-2=-1
1*2=2
1/2=0
[root@ansible /scripts/User]# cat var012.sh
#!/bin/bash
#*****************************************
#name: baozexu
#QQ: 2897374243
#Date: 2019-10-28
#FileName: var012.sh
#URL: https://www.baozexu.com
#Description:
#*****************************************
Centos=$(hostnamectl|awk -F ": " 'NR==7{print $2}')
Kernel=$(hostnamectl|awk -F ": " 'NR==9{print $2}')
Hostname=$(hostname)
ip=$(ip a|grep lo|awk 'NR==3{print $2}')
echo "系统版本为: ${Centos}"
echo "内核为: ${Kernel}"
echo "主机名为: ${Hostname}"
echo "lo网卡地址为: ${ip}"
[root@ansible /scripts/User]# sh var012.sh
系统版本为: CentOS Linux 7 (Core)
内核为: Linux 3.10.0-957.el7.x86_64
主机名为: ansible
lo网卡地址为: 127.0.0.1/8
原文:https://www.cnblogs.com/baozexu/p/11755394.html