shell脚本基本操作

 

概述:

Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。

当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本

 解释:

echo 表示打印  ,, 变量调用语法: $变量名  

1.查看tomcat进程并杀掉进程

#!/bin/bash
echo "开始查询tomcat运行的进程编号,查出将其kill"
dsp_admin_id=`ps -ef|grep tomcat|grep -v "grep" | awk '{print $2}'`
echo $dsp_admin_id

for id in $dsp_admin_id
do
    kill -9 $id
    echo "killed $id"
done

命令行:

#####查找tomcat进程($2表示下标,可以为其他)
ps -ef | grep tomcat | grep -v grep | awk '{print $2}'
#####查找tomcat进程并杀死
ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9

2.分支判断

#int类型_变量大小判断
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi



#字符串判断(adc可以为变量)
if [ -n 'abc' ];then
    echo "字符串长度大于0"
elif [ -z 'abc' ];then
    echo "字符串长度为0"
elif [ 'abc' = 'abc' ];then
    echo "两个字符串相等"
elif [ 'abc' != 'abc' ];then
    echo "两个字符串不相等"
fi



#____多条件判断____________
a=20
b="dalan_123"
#统计字符串长度
echo ${#b}
if (( $a > 10 && ${#b} > 20 ));then
    echo "两个条件同时满足"
    
elif (( $a > 10 || ${#b} > 20 ));then
    echo "满足一个就执行"
    
else
    echo "条件不满足"
fi



#if嵌套
aa=100
if [ $aa -gt 50 ];then
    echo "$aa 大于50"
    if (( $aa % 2 == 0 ));then
        #两种操作方式
        echo "$(($aa+120))"
        echo "$[$aa+120]"
        echo "$aa %2= $[$aa%2]"
    fi
else
    echo "$aa 不小于50"
fi



#从键盘接收数据判并判断
read age
if (( $age <= 2 )); then
    echo "婴儿"
elif (( $age >= 3 && $age <= 8 )); then
    echo "幼儿"
elif (( $age >= 9 && $age <= 17 )); then
    echo "少年"
elif (( $age >= 18 && $age <=25 )); then
    echo "成年"
elif (( $age >= 26 && $age <= 40 )); then
    echo "青年"
elif (( $age >= 41 && $age <= 60 )); then
    echo "中年"
else
    echo "老年"
fi



#文件比较
if [ -e test.html ];then
    echo "test.html存在"
elif [ -d test.html ];then
    echo "test.html是目录"
elif [ -f test.html ];then
    echo "test.html存在,并且是一个普通文件"
elif [ -c test.txt ];then
    echo "文件存在特殊字符"
elif [ -n test.txt ];then
    echo "文件为空"
else
    echo "不知道,拜拜"
fi


#####从键盘输入并判断是否为正整数
#/bin/bash
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
echo "当前时间:$TIMESTAMP"
read -p "请输入线程数: " threadsnum
read -p "请输入循环次数: " cycles
if [[ $threadsnum =~ ^[0-9]+$ ]] && [[ $cycles =~ ^[0-9]+$ ]]; then
    echo "开始处理..............."
else
    echo "输入的不是正整数,程序退出!"
fi

 

3.字符串操作

#!/bin/bash
#字符串拼接(连接、合并)
name="Shell"
url="http://c.biancheng.net/shell/"
str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5
#统计字符串长度
echo ${#url}



#字符串截取
url="www.biancheng://wei.net"
#截取3到7位字符串
echo ${url:3:7}
#截取第5位后的字符串
echo ${url:5}
#休眠5秒(强等待)
sleep 5s 

#截取':'后的数据
echo ${url#*:}

 

4.循环

#!/bin/bash
#___________while循环__________________
read -p "从键盘接收数据:" snum  
read -p "从键盘接收数据: " enum  
#while循环
while [[ $snum -le $enum ]];do  
    echo "当前为 $snum"  
    ((snum++))  
done  
echo "执行完成"


#死循环
while true  
do  
echo "Welcome to Yiibai"  
done


#从1叠加到100的总和
i=1
sum=0  
while((i <= 100))  
do  
    #echo $i    
    sum=$[sum+i]
    let i++
done
echo $sum



#__________for循环___________________
sum=0
for ((i=1; i<=100; i++))
do
    #循环体
    ((sum += i))
done
echo "总和为 $sum"



#通过in来循环
sum=0
for n in 1 2 3 4 5 6
do
    echo $n
     ((sum+=n))
done
echo "The sum is "$sum



#循环和判断
sum=0
for ((i=1; i<=50; i++))
do  
    if (( $i % 2 == 0 ));then
        echo $i
    fi
    ((sum += i))
done
echo "总和为 $sum"

 

5.其他

#!/bin/bash
#判断运行python进程是否大于1
if [ $(ps -ef|grep -c "python3") -gt 1 ]
then 
   echo "true"
fi


#列出当前运行的进程数量
aa=$(ps -ef|grep -c "tomcat")
echo "$aa"

#列出tomcat在运行的进程信息
aa=$(ps -ef|grep "tomcat")
echo "$aa"


#两种打印打球路径的方法
echo $(cd $(dirname $0); pwd)
echo $path `pwd`

 

6. shell内调用python脚本

#!/bin/bash
a=$(grep -c "验证通过" /home/work/test/index.html)
b=20
if [ $a -gt $b ]
then
  echo "$a 条件通过"
else
   echo "条件不通过"
   #打印当前所在目录
   echo $path `pwd`
   #执行python脚本(不带函数的)
   python pppp.py
fi


#!/bin/bash
a=$(grep -c "验证通过" /home/work/test/index.html)
echo "$a"
b=20
if [ $a -gt $b ]
then
  echo "$a 条件通过"
else
   echo "条件不通过"
   cd /home/work
   echo $path `pwd`
   #调用函数(带参数)
   checkresult=`python -c 'import ppp; print ppp.wei("chenwei_zai_dalan")'`
   echo $checkresult
fi


###############通过shell脚本调用python并传参数############ #/bin/bash TIMESTAMP=$(date +"%Y%m%d_%H%M%S") echo "当前时间:$TIMESTAMP" python3 123.py "参数一" "参数二" """ ########python脚本如下(123.py) #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys print("00000",sys.argv[0]) print("11111",sys.argv[1]) print("22222",sys.argv[2]) print("==---==all=======") """

 

 7.判断文件是否存在

#!/bin/bash

if [ -f file.txt ];then
 echo "文件存在"
else
 echo "文件不存在"
fi


#!/bin/bash TIMESTAMP=$(date +"%Y%m%d_%H%M%S") #获取时间 #判断目录存在且不为空 if [ -d "./report/${TIMESTAMP}" ] && [ -n "$(ls -A "./report/${TIMESTAMP}")" ]; then echo "目录存在且不为空" #把目录递归打包成zip文件 zip -r ./report/${TIMESTAMP}.zip ./report/${TIMESTAMP} else echo -e "\033[31m >>>>>>>目录不存在或目录为空,报告生成失败!>>>>>>\033[0m" fi

 

 8.检测本机当前用户是否为超级管理员

#!/bin/bash

# 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不
# 是,则提示您非管理员(使用字串对比版本) 
if [ $USER == "root" ] 
then 
 yum -y install vsftpd
else 
 echo "您不是管理员,没有权限安装软件"
fi

 

 9.循环检查进程是否存活,死了就重启

main_test.sh:

#!/bin/bash

while true   # 无限循环
flag=`ps -aux |grep "httpd" |grep -v "grep" |wc -l`
do
        if [[ $flag -eq 0 ]]   # 判断进程数如果等于0,则启动httpd
        then
                `systemctl start httpd`   # 启动httpd
                echo `date` - "Apache restart" >> running.log   # 将重启时间写入自定义的日志文件
        else
                echo "Apache is running..." >> /dev/null
        fi
        sleep 30s  # 延迟30秒后进入下次循环
done

备注:需要后台启动 nohup ./main_test.sh &

 

 10.函数使用

#!/bin/bash
function Add(){
    #`-e`:表示解析转义字符。当使用`echo -e`时,`echo`命令会解析转义字符,例如`\n`表示换行,`\t`表示制表符,`\"`和`\'`分别表示双引号和单引号等。
    #`echo -n`是`echo`命令的一个选项,它的作用是在输出结束后不换行。
    echo -e "\033[31m 输入一个正整数(颜色红色) \033[0m"
    read x
    echo -n "再次输入一个正整数"
    read y
echo -e "e[1;45m 背景紫色 e[0m" echo
"Adiition is: $(( x+y ))" } ##调用函数 Add

 

 

相关连接:

https://www.cnblogs.com/yinheyi/p/6648242.html ..........................................................shell基础

https://blog.csdn.net/jb19900111/article/details/13507815 ............................................shell案例

https://mp.weixin.qq.com/s/o1AVVrnbmDIkoow9jKL9nA .................................................35个实用的Shell拿来就用脚本实例!

https://mp.weixin.qq.com/s/o63aIM2p9rc2OjhxiC6wgA...........................................shell常用分析

https://www.cnblogs.com/chengJAVA/p/6115061.html ....................................................系统资源情况

https://blog.csdn.net/achenyuan/article/details/78674102 .............................................查看磁盘情况

https://i.cnblogs.com/posts?cateId=1337850.................................................................守护进程

 

posted on 2020-11-02 21:06  chen_2987  阅读(245)  评论(0编辑  收藏  举报

导航