shell实例

news/2024/10/6 16:08:22
1.显示系统一些基本信息
可以将该脚本加入到开机自启动里面,这样开机就会输出基本信息
#!/bin/bash
info(){
system=$(hostnamectl | grep System | awk '{print $3}')
kernel_release=$(hostnamectl | grep Kernel | awk -F : '{print $2}')
Virtualization=$(hostnamectl | grep Virtualization | awk '{print $2}')
server_name=$(hostname)
ipaddr=$(hostname -I)
echo "当前系统版本是:${system}"
echo "当前系统内核是:${kernel_release}"
echo "当前虚拟平台是:${Virtualization}"
echo "当前主机名是:${server_name}"
echo "当前ip地址:${ipaddr}"
}
checkerrror(){
error_info=$(dmesg | grep error)
if [ ! -e ${error_info} ]
then
echo "无错误日志!"
else
echo ${error_info}
fi
}
info
checkerrror
2.关闭系统防火墙和SELinux
检查防火墙状态,是否安装防火墙,如果安装则关闭、关闭SELinux、清空iptables规则
#!/bin/bash
close_firewalld(){
code=$(systemctl status firewalld)
if [ ${code} -eq 0 ]
then
systemctl stop firewalld
fi
}
close_selinux(){
sed -i '/^SELINUX/s/=./=disabled/' /etc/selinux/config
setenforce 0
}
close_iptables(){
iptables -F
service iptables save
service iptables restart
}
close_firewalld
close_selinux
close_iptables
3.定时任务计划:归档备份
打包压缩/var/log/nginx目录下所有内容,存放在/tmp/nginx目录里
压缩文件命名规范:yymmdd_logs.tar.gz,只保存七天内的文件,超过七天的文件会进行清理
#!bin/bash
date="$(date +%Y%m%d)"
dir='/tmp/nginx'
backupfile='_logs.tar.gz'
#查看/tmp/nginx是否存在,不存在则创建
checkbak(){
if [ ! -e ${dir} ]
then
mkdir ${dir}
fi
}
#压缩文件
backup(){
tar -zcvf ${dir}/${date}${backupfile} /var/log/nginx/ > /dev/null 2>&1
echo "${backupfile} Compressed and packaged successfully !"
}
#清除七天过期文件
cleanup(){
find ${dir} -type f -mtime +7 | xagrs rm -rf
if [ $? -eq 0 ]
then
echo "Cleaned up successfully!"
else
echo "data cleaning failed error, please pay attention in time"
fi
}
checkbak
backup
cleanup
4.自动批量创建用户
批量创建user1、user2、user3.....
#!/bin/bash
#检查用户是否存在,不存在则创建
checkuser(){
for i in $(seq 1 20)
do
id user${i} > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "user${i} 已存在!"
else
useradd user${i} && echo "user${i}" | passwd --stdin user${i} > /dev/null 2>&1
fi
done
}
checkuser
5.通过位置参数创建用户
$1 是执行脚本的第一个参数
$2 是执行脚本的第二个参数
#!/bin/bash
checkuser(){
id ${1} > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "${1} 已存在!"
else
useradd "$1"
echo "$2" | passwd ‐‐stdin "$1"
fi
}
6.批量删除用户
批量删除user1...user20
#!/bin/bash
#检查用户是否存在,存在则删除
checkuser(){
for i in $(seq 1 20)
do
id user${i} > /dev/null 2>&1
if [ $? -eq 0 ]
then
userdel -r user${i}
else
echo "user${i} 不存在!"
fi
done
}
checkuser
7.更新系统时间,并写入硬件时间里
查看是否安装ntpdate工具
创建上海时区文件的软链接
更新时间并写入到硬件时间里
#!/bin/bash
package="ntpdate"
info=$(rpm -q ${package})
check_pkgs(){
if [ -e ${info} ]
then
echo "ntpdate already exists!"
else
echo "start installation!"
yum clean all > /dev/null 2>&1
fi
yum update -y && yum install -y ${package} > /dev/null 2>&1
fi
}
modify_time(){
echo "开始修改时间"
rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/usr/sbin/ntpdate cn.pool.ntp.org > /dev/null 2>&1 && hwclock -w
}
check_pkgs
modify_time
8.检查服务运行状态
检查某一服务是否正常运行,执行脚本的时候第一个参数为服务名
#!/bin/bash
result=$(pidof $1 | wc -l)
#echo ${result}
if [ ${result} -eq 0 ]
then
echo "service does not exist !"
else
echo "Service is running normally !"
fi
9.对目标主机进行心跳检测
ping目标主机看是否ping得通,三次ping通表示主机正常运行
将目标主机的ip地址作为第一个参数传进去
#!/bin/bash
ipaddr=$1
echo ${ipaddr}
ping_status(){
if ping -c 1 ${ipaddr} > /dev/null 2>&1
then
echo "ping ${ipaddr} is successful!"
continue
fi
}
for i in $(seq 1 3)
do
ping_status
echo "ping ${ipaddr} is failure!"
done
进阶版:对ip地址池里的主机分别进行心跳检测
ipaddr=(192.168.149.131 192.168.149.130 192.168.149.132 192.168.149.133)
for i in ${ipaddr[]}
do
echo ".... begin to ping ${i} ....."
if ping -c 3 ${i} > /dev/null 2>&1
then
echo "ping ${i} is successful!"
else
echo "ping ${i} is failure!"
fi
done
10.系统磁盘内存容量告警
根分区剩余空间小于20%(即使用空间大于80%) 输出告警信息
内存使用空间大于80% 输出告警信息
配合crond每5分钟检查一次
#!/bin/bash
disk_letfspace=$(df -Th | grep -w / | awk '{print$6}' | cut -d % -f 1)
mem_used=$(free -m | grep Mem | awk '{print$3}')
mem_total=$(free -m | grep Mem | awk '{print$2}')
mem_letfspace=$[${mem_used}*100/${mem_total}]
if [ ${disk_letfspace} -gt 80 ] #-gt大于
then
echo "Disk free space is less than 20%!"
else
echo "${disk_letfspace}% of disk space left"
fi
if [ ${mem_letfspace} -gt 80 ]
then
echo "memory space is less than 20%!"
else
echo "${mem_letfspace}% of memory space left"
fi
# 添加定时任务
crontab -l
*/5 * * * * /root/check_space.sh
11.操作系统信息提取
#!/bin/bash
#清除屏幕信息
clear
if [[ $# -eq 0 ]]
then
#系统类型
os=$(uname -o)
echo "Operating System Type:" $os
#系统版本和名字
os_name=$(cat /etc/issue | grep -e "Server")
echo "Check OS Release Version and Name:" $os_name
#cpu架构信息
architecture=$(uname -m)
echo "Check Architecture:" $architecture
#操作系统内核版本
kernerrelease=$(uname -r)
echo "Check Knerner release:" $kernerrelease
#主机名
hostname=$(uname -n)
echo "Check Hostname:" $hostname
#内网ip
internelip=$(hostname -I)
echo "Check Internel ip" $internalip
#公网ip
externalip=$(curl -s http://ipecho.net/plain)
echo "Check External ip:" $externalip
#dns信息
nameservers=$(cat /etc/resolv.conf | grep -E "<nameserver[ ]+" |awk '{print $NF}')
echo "Check DNS:" $nameservers
#是否已连接到Internet
ping -c 2 baidu.com &>/dev/null && echo "Internet:Connectd" || echo "Internet:Disconnected"
#检查用户登录数
who>/tmp/who
echo "Logged In Users" && cat /tmp/who
rm -f /tmp/who
#############################
#操作系统运行状态
#系统使用内存=Total-Free
#应用使用内存=Total-(Free+Cached+Buffers)
system_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo)
echo "system memuserages " $system_mem_usages
app_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}/^Cache/{caches=$2}/Buffers/{buffers=$2}END{print (total-free-cached-buffers)/1024}' /proc/meminfo)
echo "apps memuserages " $app_mem_usages
#cpu负载
loadaverage=$(top -n 1 -b | grep "load average:" | awk '{print $11 $12 $13}')
echo "load averages" $loadaverage
#磁盘使用量
diskaverage=$(df -h | grep -vE 'Filesystem|tmpfs' | awk '{print $1 " " $5}')
echo "disk averages " $diskaverage
fi
12.第三方服务监控
#!/bin/bash
Nginxserver="http://192.168.47.128/nginx_status"
Check_Nginx_Server()
{
Status_code=$(curl -m 5 -s -w %{http_code} ${Nginxserver} -o /dev/null)
if [ $Status_code -eq 000 -o $Status_code -ge 500 ];then
echo -e "Check http server erro,Response status code is" $Status_code
else
Http_content=$(curl -s ${Nginxserver})
echo -e "Check http server ok!\n" $Http_content
fi
}
Check_Nginx_Server
13.收集内核信息
#! /bin/bash
main()
{
if [ ! "ls -A /usr/src/" == "" ];then
mkdir kernel_header
cp -rf /usr/src/ kernel_header > /dev/null 2>&1 && echo "collect kernel headers done"
cp /etc/release kernel_header > /dev/null 2>&1 && echo "collect release version done"
uname -a >>"kernel_header/uname" 2>&1
uname -r >>"kernel_header/uname" 2>&1
uname -m >>"kernel_header/uname" 2>&1
echo "collect uname version done"
which dpkg >> "kernel_header/package" 2>&1
which apt >> "kernel_header/package" 2>&1
which rpm >> "kernel_header/package" 2>&1
which yum >> "kernel_header/package" 2>&1
echo "collect package manager done"
tar zcf kernel_header.tar.gz kernel_header --remove-files
echo "collect kernel header success, please copy $(pwd)/kernel_header.tar.gz"
else
echo "/usr/src is empty, collect kernel header failed!"
fi
}
main
14. 复制命令及其依赖到指定目录
#!/bin/bash
###################
变量声明
###################
#如果用户没有输入目标路径,将使用如下路径
DIR=/mnt/tmp
#提示信息
prompt_1="Pls run as root user"
prompt_2="路径名不能是/根目录,已将文件拷贝到默认路径"
prompt_3="输入的命令名不正确,或者输入了多个命令名,请重新输入一个命令名"
prompt_4="只能使用一个路径且不能是/根目录或包含空格,已将文件拷贝到默认路径"
prompt_5="只能输入一个命令名,不能包含空格"
###################
函数
###################
#. /etc/init.d/functions
#复制命令
cpcmd(){
local cmdpath=$2$(dirname which --skip-alias $1)
[ -d $cmdpath ] || mkdir -p $cmdpath
cp -a which --skip-alias $1 $cmdpath
[ $? -eq 0 ] && action "$1 finish copy" true || action "$1 finish copy" false
}
#复制库
cplib(){
local libs=$(ldd which --skip-alias $1| egrep -o "/[^ ]+")
for i in $libs;do
local libpath=dirname $i
[ -d $2$libpath ] || mkdir -p $2$libpath
cp $i ${2}${libpath}
done
[ $? -eq 0 ] && action "$1's dependent libs finish copy" true || action "$1's dependent libs finish copy" false
}
###############
主体部分
###############
#判断是否是管理员
[ $UID -ne 0 ] && { echo "$prompt_1"; exit; }
#如果命令行没有传参,提示用户重新输入
flag=0
while [ $flag -ne 1 ]; do
if [ $# -eq 2 ];then
which --skip-alias $1 &>/dev/null
[ $? -ne 0 ] && { echo -e "\033[1;33mUsage: $0 [CMD] [PATH]\033[0m";exit 1; }
cmd=$1
#判断输入的路径是否是根目录
path=$2
[ "$path" == "/" ] && { path=$DIR;echo -e "\033[1;33m${prompt_2}$DIR \033[0m"; }
flag=1
else
#1.提示用户输入命令名
while : ; do
read -p "请输入需要拷贝的命令(quit退出) " cmd
[[ "$cmd" == " " ]] && { echo -e "\033[1;33m$prompt_5\033[0m"; continue; }
#判断用户输入的是否是quit,是则退出
tmp=${cmd^^}
[ "$tmp" == "QUIT" ] && exit
which --skip-alias $cmd &>/dev/null
[ $? -eq 0 ] && break
echo -e "\a\033[1;31m${prompt_3}\033[0m"
done
#2.提示用户输入目标路径(默认路径$DIR):
read -p "请输入需要拷贝的目标路径(默认路径$DIR): " path
[ "$path" == "/" ] || [[ "$path" == " " ]] && { path=$DIR;echo -e "\033[1;33m${prompt_4}$DIR \033[0m"; }
path=${path:=$DIR}
[ -d $path ] || mkdir -p $path
fi
#3.拷贝命令到指定目录
cpcmd $cmd $path
#4.拷贝函数到指定目录
cplib $cmd $path
done
15.重启脚本(指定重启次数和间隔时间)
#!/bin/bash
rootPWD="testpass"
logFile=$PWD/reboot.log
inputSTR[0]="#!/bin/bash"
inputSTR[1]="source /opt/times.left"
inputSTR[2]="rm -rf /opt/times.left"
inputSTR[3]="if [ ${timesLeft} -gt '0' ];then"
inputSTR[4]=" echo "还剩余${timesLeft}次重启。" >> ${logFile}"
inputSTR[5]=" date >> ${logFile}"
inputSTR[6]=" echo >> ${logFile}"
inputSTR[7]=" echo "timesLeft=$((timesLeft-1))" > /opt/times.left"
inputSTR[8]=" reboot"
inputSTR[9]="else"
inputSTR[10]=" sed -i '/./rbt.sh/d' /etc/crontab"
inputSTR[11]=" rm -rf /opt/rbt.sh"
inputSTR[12]=" chown ${USER}:${USER} ${logFile}"
inputSTR[13]="fi"
echo -n -e "请输入自动重启的次数:\t"
read timesLeft
echo "timesLeft=${timesLeft}" > $PWD/times.left
echo ${rootPWD} | sudo -S mv $PWD/times.left /opt/times.left &> /dev/null
echo -n -e "请输入重启间隔的时间(分钟):\t"
read interval
echo -e "Checking necessary files for auto rebooting ..."
if [ ! -f /opt/rbt.sh ];then
for ((i=0; i<${#inputSTR[@]}; i++))
do
echo ${inputSTR[$i]} >> $PWD/rbt.sh
done
echo ${rootPWD} | sudo -S mv $PWD/rbt.sh /opt/rbt.sh
echo ${rootPWD} | sudo -S chown root:root /opt/rbt.sh
echo ${rootPWD} | sudo -S chmod a+x /opt/rbt.sh
fi
echo -e "\e[1;32m[ REBOOT SCRIPT OK]\e[0m"
oldIFS=$IFS
IFS=$'\n'
cfgOK=$(cat /etc/crontab | grep "./rbt.sh")
if [ ! ${cfgOK} ];then
echo ${rootPWD} | sudo -S sed -i "$a*/${interval:=2} * * * * root cd /opt && ./rbt.sh" /etc/crontab
fi
IFS=$oldIFS
echo -e "\e[1;32m[CRONTAB CONFIG OK]\e[0m"
echo -n "请稍候,系统即将重启中……"
read
 
16.关机、重启、待机、休眠测试
#!/bin/bash
uid=echo "$UID";
if [ $uid -ne 0 ];then
zenity --info --text="该程序每次以ROOT身份执行";
exit;
fi;
SHUTDOWN="关机测试";
REBOOT="重启测试";
SUSPEND="待机测试";
SLEEP="休眠测试";
echo logname >/tmp/lognames;
usrname=cat /tmp/lognames;
echo "chmod 666 /sys/class/rtc/rtc0/wakealarm " >> /etc/rc.local;
SELECTION=zenity --list --radiolist --title="测试工具" --text="选择您想操作的一项功能" --column "" --column "请您选择" True "$SHUTDOWN" Fasle "$REBOOT" Fasle "$SUSPEND"
Fasle "$SLEEP"
if [ -e $SELECTION ] ; then
exit;
fi
if [ "$SELECTION" = "$SHUTDOWN" ] ;then
echo -e -n "[daemon]\n TimedLoginEnable=true\n TimedLogin=$usrname\n TimedLoginDelay=0">>/etc/gdm/custom.conf;
chmod 666 /etc/gdm/custom.conf;
TestNo=zenity --entry --text="请您输入需要关机测试的次数";
if [ -e $TestNo ] ;then
exit
fi
echo $TestNo > /tmp/LogBootNo;
chmod 666 /tmp/LogBootNo;
echo "BootReplace.sh" >>/etc/rc.local;
BootTest.sh;
fi
if [ "$SELECTION" = "$REBOOT" ]; then
echo -e -n "[daemon]\n TimedLoginEnable=true\n TimedLogin=$usrname\n TimedLoginDelay=0">>/etc/gdm/custom.conf;
chmod 666 /etc/gdm/custom.conf;
TestNo=zenity --entry --text="请您输入需要重启测试的次数";
if [ -e $TestNo ] ;then
exit
fi
echo $TestNo > /tmp/LogRebootNo;
chmod 666 /tmp/LogRebootNo;
echo "RebootReplace.sh" >>/etc/rc.local;
RebootTest.sh;
fi
if [ "$SELECTION" = "$SUSPEND" ] ;then
TestNo=zenity --entry --text="请您输入需要待机测试的次数";
if [ -e $TestNo ] ;then
exit
fi
echo $TestNo > /tmp/LogSuspendNo;
chmod 666 /tmp/LogSuspendNo;
SuspendTest.sh;
fi
#if [ "$SELECTION" = "$SLEEP" ] ;then
TestNo=zenity --entry --text="请您输入需要休眠测试的次数";
#if [ -e $TestNo ] ;then
exit
fi
echo $TestNo > /tmp/LogSleepNo;
chmod 666 /tmp/LogSleepNo;
SleepTest.sh;
#fi
17.读取1.txt文本并输出其内容
#!/bin/bash
# while语句应用
while read line
do
echo $line
done < 1.txt
18.示例2
#!/bin/sh
#xrdp X session start script (c) 2015, 2017 mirabilos
#published under The MirOS Licence
if test -r /etc/profile; then
. /etc/profile
fi
if test -r /etc/default/locale; then
. /etc/default/locale
test -z "${LANG+x}" || export LANG
test -z "${LANGUAGE+x}" || export LANGUAGE
test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
test -z "${LC_ALL+x}" || export LC_ALL
test -z "${LC_COLLATE+x}" || export LC_COLLATE
test -z "${LC_CTYPE+x}" || export LC_CTYPE
test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
test -z "${LC_MONETARY+x}" || export LC_MONETARY
test -z "${LC_NAME+x}" || export LC_NAME
test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
test -z "${LC_PAPER+x}" || export LC_PAPER
test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
test -z "${LC_TIME+x}" || export LC_TIME
test -z "${LOCPATH+x}" || export LOCPATH
fi
if test -r /etc/profile; then
. /etc/profile
fi
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
 
 
19、记录远程登录信息
#!/bin/bash
PS1="whoami@hostname:"'[$PWD]'
history
USER_IP=who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'
echo $USER_IP
if [ "$USER_IP" = "" ]
then
USER_IP=hostname
fi
if [ ! -d /tmp/ruige ]
then
mkdir /tmp/ruige
chmod 777 /tmp/ruige
fi
if [ ! -d /tmp/ruige/${LOGNAME} ]
then
mkdir /tmp/ruige/${LOGNAME}
chmod 300 /tmp/ruige/${LOGNAME}
fi
export HISTSIZE=4096
DT=date '+%Y:%m:%d %r'
export HISTFILE="/tmp/ruige/${LOGNAME}/${USER_IP} ruige.$DT"
echo $HISTFILE
chmod 600 /tmp/ruige/${LOGNAME}/ruige 2>/dev/null
 
20、查找/tmp下大于1K的文件,并复制到/tmp1下
#!/bin/bash
dir1="/tmp/"
for file in `ls $dir1`
do
if [ -f $dir1$file ];then
size1=ls -l $dir1$file|awk -F ' ' '{print $5}'
if [ $size1 -gt 102420 ];then
cp $dir1$file /tmp1/
fi
fi
done
或者 find /tmp -siez +1K -exec cp {} /tmp1 \;
补充:如何将目录及子目录下的大于1K文件复制到/tmp1下
 
21、添加一个新组为 class01,然后,添加属于这个组的 30 个用户,用户名的形式为 stdXX,其中,XX 从 01 到 30
#!/bin/bash
usergroup class01
num=$(seq -w 1 1 30)
for i in $num
do
echo $i
#useradd std$i -G class01
done
或者
seq -f "std%02g" 1 1 30|useradd -G class01
 
22、从 a.log 文件中提取包含“WARNING”或”FATAL”,同时不包含“IGNOR”的行,然后提取以“:”分割的第五个字段
grep -E 'WARNING|FATAL' a.log|grep -v 'IGNOR'|awk -F ':' '{print $5}'
 
23、在每个月的第一天备份并压缩/etc 目录下的所有内容,存放在/root/backup 目录里,且文件名为如下形式 yymmdd_etc,yy 为年,mm 为月,dd 为日。shell 程序 fileback存放在/usr/bin 目录下?
cd /usr/bin
vim fileback
#!/bin/bash
cd /root/backup
tar -zcf date +%y%m%d"_etc.tgz" /etc
 
* * 1 * * /usr/bin/fileback >> /var/spool/cron/crontabs/root #写入root用户下的定时任务
24、编写个 shell 脚本将当前目录下大于 10K 的文件转移到/tmp 目录下
#/bin/bash
for FileName in ls -l |awk '$5>10240 {print $9}'
do
mv $FileName /tmp
done
 
定时任务题
某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决 方案 :
(1)在下午 4 :50 删除/abc 目录下的全部子目录和全部文件;
(2)从早 8:00~下午 6:00 每小时读取/xyz 目录下 x1 文件中每行第一个域的全部数据
加入到/backup 目录下的 bak01.txt 文件内;
(3)每逢星期一下午 5:50 将/data 目录下的所有目录和文件归档并压缩为文件:
backup.tar.gz;
(4)在下午 5:55 将 IDE 接口的 CD-ROM 卸载(假设:CD-ROM 的设备名为 hdc);
(5)在早晨 8:00 前开机后启动。
参考答案:
(1)用 vi 创建编辑一个名为 prgx 的 crontab 文件;
prgx 文件的内容:
50 16 * * * rm -r /abc/*
(2)、0 8-18/1 * * * cut -f1 /xyz/x1 >> /backup/bak01.txt
(3)、50 17 * * * tar zcvf backup.tar.gz /data
(4)、55 17 * * * umount /dev/hdc
(5)、由超级用户登录,用 crontab 执行 prgx 文件中的内容:
root@xxx:#crontab prgx;在每日早晨 8:00 之前开机后即可自动启动 crontab。
=====25、判断输入的文件是否是字符文件
#!/bin/bash
read -p "shuru" filename
echo $filename
if [ -c $filename ];then
echo "ok"
else
echo "no"
fi
======26、case流程控制实现apache服务管理
#!/bin/bash
# 脚本 加一个参数,通过参数判断
case "$1" in
'start')
/usr/sbin/apachectl start ;;
'stop')
/usr/sbin/apachectl stop ;;
'restart')
/usr/sbin/apachectl restart ;;
) echo "usage $0 start|stop|restart" ;; esac
======27、验证passwdxx⽂件有效性
kylin@kylin-W515:~/桌面$ cat cc
root:x:0:0:root:/root:/bin/bash
:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin::2:2:bin:/bin:/usr/sbin/nologin
x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
 
kylin@kylin-W515:~/桌面$ cat cc | awk -F: '\ #使用:作为分隔符
NF != 7{\ #当域的数量不等于7时,执行下面
#printf打印字符串"line ?? does not have 7 fields",并显⽰该条记录。
printf("line %d,does not have 7 fields:%s\n",NR,$0)}
#如果第⼀个域没有包含任何字⺟和数字,printf打印“no alpha and numeric user id" ,并显⽰记录数和记录
$1 !~ /[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%s\n",NR,$0)}\
#如果第⼆个域是⼀个星号,就打印字符串“no passwd”,紧跟着显⽰记录数和记录本⾝
$2 == "" {printf("line %d,no password: %s\n",NR,$0)}'
 
line 2,non alpha and numeric user id::x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
line 3,no password: bin::2:2:bin:/bin:/usr/sbin/nologin
line 4,does not have 7 fields:x:3:3:sys:/dev:/usr/sbin/nologin
 
=====判断输入的压缩文件类型,并解压
#!/bin/bash ftype=`file $1` case $ftype in "$1: Zip archive"*) unzip $1;; "$1: gzip compressed"*) gunzip $1;; "$1: bzip2 compressed"*) bunzip2 $1;; *) echo "file $1 can not be uncompressed with smartzip";; esac
 
=====下载一个包 待完善!
根据用户输入的包名,迷糊匹配apt数据库,将查询结果展示并排序,根据用户输入的数字,选择的包下载
#!/bin/bash #问题:当将apt查询结果保存到变量中后,变量存储的内容行号和回车符改变乐 #根据用户输入的包名,apt查询相关包 read -p "输入包名,可输入关键词进行模糊匹配" pakname list=apt list|grep $pakname list0=head $list -n10|tr ' ' '\n'|grep -E '/'|cut -d/ -f1 echo $list0 read -p "请输入完整包名" pk #获取到包下载地址的前半部分 #text=cat apt policy $pk|grep "500"|grep https|cut -d' ' -f10|sed -n '1p' #获取到包下载地址的后半部分 #text2= cat apt-cache show $pk|grep "Filename:"|sed -n '1p' #下载包 #wget -cP "/tmp" $text$text2
=====
#!/bin/bash
#function:一键部署nginx
#请以root用户身份执行
systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
systemctl stop nginx
if [ -d /usr/local/nginx ]; then
rm -rf /usr/local/nginx
fi
read -p "部署开始(nginx=1/tengine=2):" App
if [ $App -eq 1 ];then
echo "开始部署nginx服务...."
echo "正在安装依赖包,请稍等...."
yum -y install gcc-c++ && yum install -y pcre pcre-devel && yum install -y zlib zlib-devel && yum install -y openssl openssl-devel
mkdir /usr/local/nginx && cd /usr/local/nginx
useradd -s /sbin/nologin -M nginx
echo "正在解压安装包,请稍等...."
cd /root
tar xvfz nginx-1.18.0.tar.gz
echo "正在配置,请稍等...."
cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module --with-stream
echo "正在安装服务请稍等..."
make && make install
/usr/local/nginx/sbin/./nginx -t
fi
if [ $App -eq 2 ];then
echo "开始部署nginx服务...."
if [ ! -f /usr/local/BabaSSL/libssl.pc ]; then
if [ ! -d /usr/local/src ]; then
mkdir /usr/local/src
fi
cp /root/BabaSSL-master.tar.gz /usr/local/src
cd /usr/local/src
tar -xzf BabaSSL-master.tar.gz -C /usr/local
cd /usr/local/BabaSSL
./config enable-ntls
make && make install
mkdir /usr/local/nginx && cd /usr/local/nginx
echo "正在解压安装包,请稍等...."
cd /root
tar xvfz tengine-master.tar.gz
cd tengine-master && ./configure --prefix=/usr/local/nginx/--user=nginx --group=nginx --add-module=modules/ngx_openssl_ntls --with-openssl=/usr/local/BabaSSL --with-openssl-opt="--strict-warnings enable-ntls" --with-http_ssl_module --with-stream --with-stream_ssl_module --with-stream_sni
echo "正在安装服务请稍等..."
make && make install
/usr/local/nginx/sbin/./nginx -t
fi
read -p "是否部署服务开机自启(yes=1/no=2):" fw
if [ $fw -eq 1 ];then
echo "开始部署服务开机自启...."
echo "
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target" > /lib/systemd/system/nginx.service
systemctl start nginx.service && systemctl enable nginx.service && systemctl enable nginx.service
systemctl status nginx.service
echo "服务及开机自启部署成功,请输入ifconfig | grep inet | cut -d " " -f 10 | head -1测试"
fi
if [ $fw -eq 2 ];then
echo "即将开启服务并退出脚本..."
echo "
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target" > /lib/systemd/system/nginx.service
systemctl start nginx.service && systemctl disable nginx.service && systemctl disable nginx.service
systemctl status nginx.service
echo "服务部署成功,请输入ifconfig | grep inet | cut -d " " -f 10 | head -1测试"
fi
 
===获取当前登录用户及创建新终端下解压
#!/bin/bash #创建容器根 if [ ! -d ~/.cxoffice ];then mkdir ~/.cxoffice fi if [ -d ~/.cxoffice/wecom ];then echo "已存在企业微信容器" exit 0 fi #获取当前登录用户名 U=$(id -u) if [[ $U != 0 ]];then folder=$USER else for folder in ls /home/ do if test -d /home/$folder/.config/ then user_name=who |grep $folder if [[ $user_name != "" ]];then folder=${user_name%%$" "*} #echo $folder break fi fi done fi #解压企业微信容器 if [ ! -f wecom_files.7z ];then echo "脚本需要与wecom_files.7z文件在一个目录下" exit 0 fi #新建一个终端,查看解压进度 mate-terminal -x bash -c "7z x wecom_files.7z -o/home/$folder/.cxoffice;exec bash;"
 
 
===查找baidunetdisk进程,并杀死它 shell脚本
NAME="baidunetdisk"
echo $NAME
ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo $ID
echo "start kill baidunetdisk"
for id in $ID
do
if [ "$$" = "$id" ];then
continue
else
kill -3 $id
fi
done
echo "baidunetdisk kill finished"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗

如题。 傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗还在最后一道题放集训队互测什么意思 什么叫有 \(b_{k}\) 种 \(k\) 类型的货币,同一种流通的货币不会超过二十种 什么叫接下来 \(n\) 个数表示 \(a_{1} \sim a_{n-1}\)upd:

Java - 10 二维数据

Java - 10 二维数据 一维数组的每个元素又是一个一维数组 静态初始化 int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};public class TwoDimensionArray {public static void main(String[] args) {int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};// 遍历…

Java - 11 类与对象

Java - 11 类与对象 类 类[属性, 行为] ->对象[属性, 行为] public class Test{public static void main(String[] args){Cat cat1 = new Cat(); // 创建对象cat1.name = "大宝";cat1.age = "3";cat1.color = "orange";System.out.println(ca…

20222413 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 在本周的学习过程中,我了解到了许多缓冲区溢出攻击的实际案例、缓冲区溢出攻击的原理和相关基础知识,包括GDB调试器的使用方法、反汇编、基础的汇编语言与指令等,重新温习了函数调用过程和进程管理方面的知识内容。并且通过实验一,我能够了解并熟练完成Linux系统…

函数的上下文

函数的上下文 概述 在函数体的语句中,会出现this这个词,this就是函数的上下文 函数中this是谁,就说明函数的上下文是谁 函数中的this是谁,要看是如何调用的,因为this不是一成不变的 比如我们看下面的例子 var obj = {a: 100,fun: function() {console.log(this.a);} };我们…

拥挤聚集智能监测系统

拥挤聚集智能监测系统可以通过对人员数量、密度等进行实时监测,拥挤聚集智能监测系统识别出拥挤聚集的情况,并及时发出预警。拥挤聚集智能监测系统可以通过对人员进车间的人数等进行监测,识别出是否存在人员拥堵、挤压等安全隐患,及时发出警报,提醒工作人员采取措施疏散人…

睡岗识别 AI助力企业安全管控

睡岗识别可以通过AI视频智能分析技术,睡岗识别识别出操作人员是否存在睡岗情况。例如,在变电站等场景中,睡岗识别技术可以通过对识别出操作人员是否存在睡岗情况,及时发出预警,避免因操作人员的疏忽而导致的安全事故。在工厂车间中,睡岗识别技术可以通过对工人的行为进行…

加油站安全风险监测预警系统

加油站安全风险监测预警系统可以通过对加油站设备、环境、人员等方面进行监测,加油站安全风险监测预警系统实现对加油站的全面监管。例如,在加油站油罐区中,加油站安全风险监测预警系统可以对加油站人员抽烟打电话、明火烟雾等环境安全隐患进行自动识别,及时发出预警,避免…