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脚本-终于入门了


在这里插入图片描述

为什么学shell脚本?

1.弄懂shell程序,源代码,以及python脚本能够向运维开发方向走
2.shell程序能够管理集群,提高开发的效率
3.shell是命令解释器,调用系统内核,帮助你对内核的刷新认识

1.特殊变量

$#:查看变量参数的个数
$0:查看脚本的名字
$!:查看shell后台的pid
$@:查看传递脚本所有参数的列表
$*:查看所有参数的列表,单字符串形式显示
$$:脚本本身进程的ID
$?:上一条命令的结果,显示0则成功,不是0则失败

2.内部环境变量
$PATH 
SHELL           当前使用的shell
UID 			当前的用户环境 {0|其它数字}={root|普通用户}
HOME            当前使用的用户目录
PWD        		当前的目录	
HISTFILE       	历史命令路径
PS1					#[\u@\h \W]\$    用户@主机名\目录\$
3.整数以及字符判断
3.1整数判断
-eq       测试俩个整数是否相等      (equal)

-ne       测试俩个整数是否不等		(unequal)

-gt       测试一个数是否大于一个数 (greater than)

-lt		  测试一个数是否小于一个数 (less than)

-ge	      测试一个数大于或等于 

-le       测试一个数小于或等于
3.2字符测试
=~   测试是否被正则表达式匹配
-z "string" 检测字符是否为空,空则真,不空则假    如: [ -z "" ]为真空则为真
-n "string" 检测字符是否不空,不空则真,不空则假
字符相比较大小用[[  ]],比的是第一个字母(a-zA-Z)都是大写或者都是小写比较ascii值 越大则越大
有大写又有小写则A>a B>b   但是A不大于b的情况

[root@slave02 ~]# [[ "A" < "B" ]]
[root@slave02 ~]# echo $?
0
[root@slave02 ~]# [[ "a" < "b" ]]
[root@slave02 ~]# echo $?
0
4.文件判断
-e:文件是否存在   

-b:测试是否块设备文件

-c:测试是否字符设备文件

-f:测试是否普通文件

-d:测试是否目录

-h:测试是否符号链接文件

-L:测试是否是符号链接文件

-p:测试是否是命名管道文件

-S:测试是否是套接字文件

权限相关:

-r 读

-w 写

-x 执行

特殊权限
-g
-u
-k
等
5.read输入
选项:
-p:指定提示符
-t:指定提示等待的时间(秒)
6.if判断
多分支:
if [ 条件 ];then

?	statement1

?	.....

elif  [ 条件2 ];then

?	statement2

?	....

else

?	statement3

?	....

fi
7.案例选择判断
case $变量名 in            
	'value1')                
		 statement                
		 ...                
 ;;            
	'value2')                
 		statement                
 		...                
 ;;            
*)                
 		statement                
 .		..                
 ;;        
esac

#case支持的通配符:
    *           //任意长度任意字符
    ?           //任意单个字符
    []          //指字范围内的任意单个字符
   start|stop   //俩种模式选择
8.for循环
第一种:
for  ((expr1;expr2;expr3))      # expr1:初始值条件  
								#expr2:循环的范围进行退出  
								#expr3:变量的值使用
{

?	循环体

}

for ((expr1;expr2;expr3));do            

?	循环体

done

第二种:
for  变量  in 列表; do
?	循环体
done
9.while循环
while循环用于不知道循环次数的场景,注意有退出条件
while [ 条件 ];do

	statement

	.....

done
10.深入练习

1.写一个脚本,输入三个数字进行相应的加减乘除

[root@slave02 ~]# cat script01.sh 
#!/bin/bash
a=$1
b=$2
c=$3
num1=$[$a+$b+$c]
num2=$[$a-$b-$c]
num3=$[$a*$b*$c]
echo "$a + $b + $c" = $num1
echo "$a - $b - $c" = $num2
echo "$a * $b * $c" = $num3
awk "BEGIN{printf \"$a/$b/$c=%.2f\n\",$a/$b/$c}"

[root@slave02 ~]# source script01.sh 100 10 9
100 + 10 + 9 = 119
100 - 10 - 9 = 81
100 * 10 * 9 = 9000
100/10/9=1.11

2.猜数字游戏
规则:指定一个数字,只要猜到了这个数字则过关,否则显示数字大了或者数字小了

[root@master ~]# cat test03.sh 
#!/bin/bash
nums=99
read -p "please enter a number: " num
if [ $num -gt $nums ];then
        echo "数字大了"
elif [ $num -lt $nums ];then
        echo "数字小了"
else
        echo "猜对"
fi
        
[root@master ~]# . test03.sh 
please enter a number: 10
数字小了
[root@master ~]# . test03.sh
please enter a number: 100
数字大了
[root@master ~]# . test03.sh
please enter a number: 99
猜对

3.写一个脚本,让nginx服务设置开机自启

#$0是nginx本身 $1是变量对应着下面的start|stop|restart|status
[root@192 init.d]# pwd
/etc/init.d
[root@192 init.d]# cat nginx 
#!/bin/bash
case $1 in
        'start')
          /usr/local/nginx/sbin/nginx
          ;;
        'stop')
          /usr/local/nginx/sbin/nginx -s stop
          ;;
        'restart')
        /usr/local/nginx/sbin/nginx -s stop
        /usr/local/nginx/sbin/nginx
          ;;
        'status')
          num=$(ps -ef |grep -v 'grep'|grep -c nginx:)
          if [ $num -eq 0 ];then
                 echo "nginx is stoped" 
          else
                 echo "nginx is running"
          fi
          ;;
        *)
              echo "Usage: service $0 start|stop|restart|status"
          ;;          
esac
		#当判断有nginx进程数量则认为开启服务,否则认为服务开启失败

4.利用for循环,创建user序号1-100的用户

#创建用户user1-100
[root@master ~]# cat test05.sh 
#!/bin/bash
for (( i=1;i<=100;i++));do
        useradd user$i
        id user$i &>/dev/null
        if [ $? -eq 0 ];then  #只要判断用户成功,$?才会显示0,显示0则代表执行下一条命令,否则显示user以及存在
                echo "success"
        else	
        		echo "user is exis"    
        fi
done

5.利用while循环,计算1+2…100的值

[root@slave02 ~]# cat which.sh 
#!/bin/bash
s=0                 #初始值0
i=1					#判断的数值,最终到100停止
while [ $i -le 100 ];do
s=$[$s+$i]			 
i=$[$i+1]            #自增加数
done
echo $s
[root@slave02 ~]# source which.sh 
5050
						#随便输入一个数字进行计算的话,把100改为$1即可

6.apache简单的一个编译部署脚本

1.一般项目或者脚本,文件,放在相应的位置里,方便查找
[root@slave02 tmp]# pwd
/tmp
[root@slave02 tmp]# ls
apache
[root@slave02 apache]# ls
install_apache.sh  soft
[root@slave02 soft]# ls
apr-1.7.0.tar.bz2   apr-util-1.6.1.tar.bz2    httpd-2.4.48.tar.bz2  httpd.service

[root@slave02 apache]# cat install_apache.sh #!/bin/bash echo "欢迎使用此脚本" apachedir=/usr/local/apache if [ $UID -ne 0 ];then
        echo "伙计,请使用管理员身份运行"
fi

echo "正在安装依赖包..."
yum -y install epel-release  bzip2 "@Development Tools"  &>/dev/null
yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make  &>/dev/null

id apache &>/dev/null
if [ $? -ne 0 ];then
        useradd -r -M -s /sbin/nologin apache
fi

cd /tmp/apache/soft/
tar -xf apr-1.7.0.tar.bz2
tar -xf apr-util-1.6.1.tar.bz2
tar -xf  httpd-2.4.48.tar.bz2
sed -i '/ $RM "$cfgfile"/d' apr-1.7.0/configure


echo "正在编译安装apr,请听听歌放松放松......." 
cd apr-1.7.0/
[ ! -d /usr/local/apr ]
if [ $? -eq 0 ];then
        ./configure --prefix=/usr/local/apr && make && make install &>/dev/null
else
        echo "apr已经安装"
fi

cd ../apr-util-1.6.1/
[ ! -d /usr/local/apr-util ]
if [ $? -eq 0 ];then
        ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install &/dev/null
else
        echo "apr-util已经安装"
fi

cd ../httpd-2.4.48/
[ ! -d /usr/local/apache/ ]
if [ $? -eq 0 ];then
./configure --prefix=$apachedir \
        --sysconfdir=/etc/httpd24 \
        --enable-so \
        --enable-ssl \
        --enable-cgi \
        --enable-rewrite \
        --with-zlib \
        --with-pcre \
        --with-apr=/usr/local/apr \
        --with-apr-util=/usr/local/apr-util/ \
        --enable-modules=most \
        --enable-mpms-shared=all \
        --with-mpm=prefork
        make && make install &>/dev/null
else
        echo "httpd已经安装"
fi
cd
#有影响的加判断,没影响的忽略
echo "export PATH=$apachedir/bin:\$PATH"   > /etc/profile.d/httpd.sh
ln -s $apachedir/include/ /usr/include/apache &>/dev/null
grep 'apache/man' /etc/man_db.conf   &>/dev/null

if [ $? -eq 1 ];then
        sed -i "20aMANDATORY_MANPATH   $apachedir/man" /etc/man_db.conf
else
        echo "apache is help exists"
fi

[ ! -f /usr/lib/systemd/system/httpd.service ]
if  [ $? -eq 0 ];then
        cp /clq/apache/soft/httpd.service /usr/lib/systemd/system/
else
        echo "已经存在文件跳过"
fi
systemctl daemon-reload
systemctl enable --now httpd
num02=$(ps -ef |grep -v 'grep'|grep -c httpd)
if [ $num02 -eq 0 ];then
        echo "httpd自启失败"
else
        echo "httpd自启成功"
fi
echo "欢迎下次使用"
                                 
[root@slave02 apache]# chmod +x install_apache.sh 
[root@slave02 apache]# source install_apache.sh 
[root@slave02 apache]# source install_apache.sh 
欢迎使用此脚本
正在安装依赖包...
正在编译安装apr,请听听歌放松放松.......
apr以及安装
apr-util以及安装
httpd已经安装
apache is help exists
已经存在文件跳过
httpd自启成功
欢迎下次使用

[root@slave02 ~]# systemctl status httpd.service 
● httpd.service - Start http
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-09-04 17:45:33 CST; 5h 57min ago
 Main PID: 834761 (httpd)
    Tasks: 7 (limit: 5782)
   Memory: 6.3M
   CGroup: /system.slice/httpd.service
           ├─834761 /usr/local/apache/bin/httpd -k start
           ├─835358 /usr/local/apache/bin/httpd -k start
           ├─835359 /usr/local/apache/bin/httpd -k start
           ├─835360 /usr/local/apache/bin/httpd -k start
           ├─835361 /usr/local/apache/bin/httpd -k start
           ├─835362 /usr/local/apache/bin/httpd -k start
           └─836063 /usr/local/apache/bin/httpd -k start

[root@slave02 ~]# ss -antl
State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
LISTEN        0             128                        0.0.0.0:22                      0.0.0.0:*                          
LISTEN        0             128                              *:80                            *:*                          
LISTEN        0             128                           [::]:22                         [::]:*   
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:27:40  更:2021-09-05 11:27:55 
 
开发: 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/15 13:31:28-

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