shell实例

简介: shell实例

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
d
i
r
/
{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
"
|
p
a
s
s
w
d


s
t
d
i
n
"
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=
(
r
p
m

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=
(
p
i
d
o
f
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=
(
c
u
r
l

m
5

s

w
{Nginxserver} -o /dev/null)
if [
S
t
a
t
u
s
c
o
d
e

e
q
000

o
Status_code -ge 500 ];then
echo -e "Check http server erro,Response status code is" $Status_code
else
Http_content=
(
c
u
r
l

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

  1. 复制命令及其依赖到指定目录

    !/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
    c
    m
    d
    p
    a
    t
    h
    ]
    |
    |
    m
    k
    d
    i
    r

    p
    cmdpath
    cp -a which --skip-alias
    1
    cmdpath
    [ ? -eq 0 ] && action "
    1 finish copy" true || action "$1 finish copy" false
    }

    复制库

    cplib(){
    local libs=
    (
    l
    d
    d
    w
    h
    i
    c
    h


    s
    k
    i
    p

    a
    l
    i
    a
    s
    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=
    D
    I
    R
    ;
    e
    c
    h
    o

    e
    "
    \0
    33
    [
    1
    ;
    33
    m
    {prompt_2}$DIR \033[0m"; }
    flag=1
    else

    1.提示用户输入命令名

    while : ; do
    read -p "[1;32m请输入需要拷贝的命令(quit退出)[0m " 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 "[1;32m请输入需要拷贝的目标路径(默认路径$DIR):[0m " path
    [ "
    p
    a
    t
    h
    "=="
    /
    "
    ]
    |
    |
    [
    [
    "
    path" == " " ]] && { path=
    D
    I
    R
    ;
    e
    c
    h
    o

    e
    "
    \0
    33
    [
    1
    ;
    33
    m
    {prompt_4}$DIR \033[0m"; }
    path=${path:=$DIR}
    [ -d
    p
    a
    t
    h
    ]
    |
    |
    m
    k
    d
    i
    r

    p
    path
    fi

    3.拷贝命令到指定目录

    cpcmd
    c
    m
    d
    path

    4.拷贝函数到指定目录

    cplib
    c
    m
    d
    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 "还剩余
    t
    i
    m
    e
    s
    L
    e
    f
    t




    ">>
    {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
    U
    S
    E
    R
    :
    {USER} ${logFile}"
    inputSTR[13]="fi"
    echo -n -e "请输入自动重启的次数:\t"
    read timesLeft
    echo "timesLeft=
    t
    i
    m
    e
    s
    L
    e
    f
    t
    ">
    PWD/times.left
    echo
    r
    o
    o
    t
    P
    W
    D
    |
    s
    u
    d
    o

    S
    m
    v
    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
    i
    n
    p
    u
    t
    S
    T
    R
    [
    $
    i
    ]

    >
    PWD/rbt.sh
    done
    echo
    r
    o
    o
    t
    P
    W
    D
    |
    s
    u
    d
    o

    S
    m
    v
    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
    r
    o
    o
    t
    P
    W
    D
    |
    s
    u
    d
    o

    S
    s
    e
    d

    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 "
S
H
U
T
D
O
W
N
"
F
a
s
l
e
"
REBOOT" Fasle "$SUSPEND"
Fasle "$SLEEP"
if [ -e $SELECTION ] ; then
exit;
fi
if [ "
S
E
L
E
C
T
I
O
N
"="
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 [ "
S
E
L
E
C
T
I
O
N
"="
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 [ "
S
E
L
E
C
T
I
O
N
"="
SUSPEND" ] ;then
TestNo=zenity --entry --text="请您输入需要待机测试的次数";
if [ -e $TestNo ] ;then
exit
fi
echo $TestNo > /tmp/LogSuspendNo;
chmod 666 /tmp/LogSuspendNo;
SuspendTest.sh;
fi

if [ "

S
E
L
E
C
T
I
O
N
"="
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/
L
O
G
N
A
M
E
/
{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
d
i
r
1
file ];then
size1=ls -l
d
i
r
1
file|awk -F ' ' '{print $5}'
if [ $size1 -gt 102420 ];then
cp
d
i
r
1
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

c
a
s
e
ftype in "
1
:
Z
i
p
a
r
c
h
i
v
e
"

)
u
n
z
i
p
1;; "
1
:
g
z
i
p
c
o
m
p
r
e
s
s
e
d
"

)
g
u
n
z
i
p
1;; "
1
:
b
z
i
p
2
c
o
m
p
r
e
s
s
e
d
"

)
b
u
n
z
i
p
2
1;; *) echo "file $1 can not be uncompressed with smartzip";; esac

=====

!/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 "开始部署服务开机自启...."
[kod.shinlax.com)
[kod.cp-investment.com)
[kod.876787.com)
[kod.diyikejian.com)
[kod.bccs0769.com)
[kod.ttianyouhui.com)
[kod.g-millingmachine.com)
[kod.2ni1.com)
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

===查找baidunetdisk进程,并杀死它 shell脚本
NAME="baidunetdisk"
echo $NAME
ID=ps -ef | grep " N A M E " | g r e p − 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"

相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
164 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
978 14
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
221 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
735 9