shell--作业1
1 批量解压 使用for循环实现
模板一
for tar_file in *.tar; do
if [ -f "$tar_file" ]; then
tar -xvf "$tar_file" && echo "解压 $tar_file 成功."
fi
done
for zip_file in *.zip; do
if [ -f "$zip_file" ]; then
unzip "$zip_file" && echo "解压 $zip_file 成功."
fi
done
for tar_gz_file in *.tar.gz; do
if [ -f "$tar_gz_file" ]; then
tar -xzvf "$tar_gz_file" && echo "解压 $tar_gz_file 成功."
fi
done
echo "批量解压完成."
模板二
select ACTION in \
"1. 批量解压tar.gz文件" \
"2. 批量解压.zip和war文件" \
"3. 批量删除压缩文件" \
"4. 批量打包(未实现)" \
"5. 退出脚本"; do
case $ACTION in
"1. 批量解压tar.gz文件")
echo "批量解压tar.gz文件..."
find . -type f -name "*.tar.gz" -exec tar -xzvf {} \;
break
;;
"2. 批量解压.zip和war文件")
echo "批量解压.zip和war文件..."
find . -type f \( -name "*.zip" -o -name "*.war" \) -exec unzip {} \;
break
;;
"3. 批量删除压缩文件")
echo "批量删除压缩文件..."
read -p "警告:您将删除当前目录下的所有.tar.gz, .zip和.war文件,是否继续? (yes/no): " confirm
if [[ "$confirm" == "yes" ]]; then
find . -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.war" \) -delete
fi
break
;;
"4. 批量打包(未实现)")
echo "抱歉,批量打包功能尚未实现。"
break
;;
"5. 退出脚本")
echo "退出脚本..."
exit 0
;;
*) echo "无效的选择,请重新选择。";;
esac
done
2 公司的nginx日志太大 做一个日志切割,每天生成一个日志
模板1
LOG_DIR=/usr/local/nginx/logs/
YESTERDAY_TIME=$(date -d "yesterday" +%F)
LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")
LOG_FILE_LIST="access.log"
for LOG_FILE in $LOG_FILE_LIST; do
[ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR
mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}
done
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
此脚本每天将nginx昨日的access.log移到按年月分的目录,并重命名,然后让nginx重新打开日志文件。流程如下:
1. 设置日志路径变量,昨日前缀名。
2. 循环处理access.log,创建昨月目录(如无)。
3. 移动access.log到昨月目录,并添加日期后缀。
4. 向nginx主进程发USR1信号,令其刷新日志文件。
模板2
nmkdir -p /usr/local/nginx/logs/date(为了存放切分日志文件的)
LOGS_PATH=/usr/local/nginx/logs/
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
KEEPTIME=$(date -d "-30 days" +%Y-%m-%d)
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/date/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/date/error_${YESTERDAY}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
rm -f ${LOGS_PATH}/date/access_{KEEPTIME}.log
rm -f ${LOGS_PATH}/date/error_{KEEPTIME}.log
此脚本每日自动整理nginx日志:
1. 获取昨天和30天前日期。
2. 将昨日access和error日志移动到/logs/date目录并重命名(加日期)。
3. 发送信号给nginx,使其重新打开日志文件。
4. 删除30天前的日志文件。
crontab -e
1 0 0 * * * sh /usr/local/nginx/logs/cut_nginx_log.sh
(使定时任务每天0点执行,将前一天的access.log和error.log文件改为带昨日日期时间戳的log文件,然后重载配置文件,生成新的access.log,error.log存储新一天的记录)
crontab -l
3 写一个脚本 实现判断 192.168.10.0/24 网络里 当前在线ip,能ping通 就是在线 ping不通 则打印 报警
for ip in $(seq 1 254); do
address="192.168.10.$ip"
ping -c 1 -W 1 $address > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$address 在线"
else
echo "$address 不在线 (报警)"
fi
done
效果
[root@centos7mage logs]
10.0.1.1 在线
10.0.1.2 在线
10.0.1.3 不在线 (报警)
10.0.1.4 不在线 (报警)
10.0.1.5 不在线 (报警)
10.0.1.6 不在线 (报警)
10.0.1.7 不在线 (报警)
10.0.1.8 不在线 (报警)
10.0.1.9 不在线 (报警)
10.0.1.10 不在线 (报警)
10.0.1.11 不在线 (报警)
10.0.1.12 不在线 (报警)
10.0.1.13 不在线 (报警)
4 写一个脚本完成 输入编号 输出需要查看内容:
1.help帮助
2.显示内存使用
3.显示磁盘使用
4.登录用户
5.查看ip
function help_message {
echo "1. 显示帮助信息"
echo "2. 显示内存使用情况"
echo "3. 显示磁盘使用情况"
echo "4. 显示登录用户列表"
echo "5. 显示本机IP地址"
}
function display_memory_usage {
free -h
}
function display_disk_usage {
df -h
}
function show_logged_in_users {
who
}
function show_ip_address {
hostname -I
}
while true; do
echo "请选择操作:"
help_message
read -p "请输入编号: " choice
case $choice in
1) help_message ;;
2) display_memory_usage ;;
3) display_disk_usage ;;
4) show_logged_in_users ;;
5) show_ip_address ;;
*) echo "无效的选择,请重新输入!" ;;
esac
echo
done
效果
[root@centos7mage logs]
请选择操作:
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请输入编号: 1
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请选择操作:
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请输入编号: 2
total used free shared buff/cache available
Mem: 972M 156M 310M 7.5M 505M 654M
Swap: 4.0G 264K 4.0G
请选择操作:
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请输入编号: 3
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda2 94G 7.8G 86G 9% /
/dev/sda3 47G 33M 47G 1% /data
/dev/sda1 1014M 153M 862M 16% /boot
请选择操作:
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请输入编号: 4
root pts/0 2024-04-07 16:29 (10.0.1.1)
root pts/1 2024-04-07 12:57 (10.0.1.1)
请选择操作:
1. 显示帮助信息
2. 显示内存使用情况
3. 显示磁盘使用情况
4. 显示登录用户列表
5. 显示本机IP地址
请输入编号: 5
10.0.1.145
5 使用shell 完成 将当前目录下大于10K的文件批量转移到/tmp目录下
find . -type f -size +10k -exec mv {} /tmp \;
echo "已完成转移大于10K的文件至/tmp目录。"
效果(部分展示)
[root@centos7mage tmp]
0 /tmp/
[root@centos7mage ~]
已完成转移大于10K的文件至/tmp目录。
[root@centos7mage ~]
594M /tmp/
HashTreeTraverser.html
HC4CookieHandler.html
HeaderAsPropertyRenderer.html
HeaderAsPropertyRendererWrapper.html
Header.html
HeaderManager.html
HeaderPanel.html
HeapDumper.html
Help.html
hints_and_tips.html
HitsPerSecondGraphConsumer.html
Hoic-高轨道离子炮-压力测试工具.rar
HoldSampleSender.html
HorizontalPanel.html
HTMLAssertionGui.html
HTMLAssertion.html
HtmlExtractorGui.html
HtmlExtractor.html
HtmlPane.html
HTMLParseException.html
HTMLParser.html
HtmlParsingUtils.html
HtmlReportAction.html
HtmlReportGenerator.html
html_report_menu.png
HtmlReportUI.html
HtmlTemplateExporter.html
HTTPAbstractImpl.html
HTTPArgument.html
HTTPArgumentsPanel.html
httpasyncclient-4.1.5.jar
httpclient-4.5.13.jar
HttpClientDefaultParameters.html
HTTPConstants.html
HTTPConstantsInterface.html
http-cookie-manager.png
httpcore-4.4.15.jar
httpcore-nio-4.4.15.jar
http-defaults1.png
http-defaults2.png
HttpDefaultsGui.html
HTTPFileArg.html
HTTPFileArgs.html
HTTPFileArgsPanel.html
HTTPFileImpl.html
HTTPHC4Impl.html
6.一键部署LNMP
#!/bin/bash
NGINX_V=1.15.6
PHP_V=5.6.36
TMP_DIR=/tmp
INSTALL_DIR=/usr/local
PWD_C=$PWD
echo
echo -e "\tMenu\n"
echo -e "1. Install Nginx"
echo -e "2. Install PHP"
echo -e "3. Install MySQL"
echo -e "4. Deploy LNMP"
echo -e "9. Quit"
function command_status_check() {
if [ $? -ne 0 ]; then
echo $1
exit
fi
}
function install_nginx() {
cd $TMP_DIR
yum install -y gcc gcc-c++ make openssl-devel pcre-devel wget
wget http://nginx.org/download/nginx-${NGINX_V}.tar.gz
tar zxf nginx-${NGINX_V}.tar.gz
cd nginx-${NGINX_V}
./configure --prefix=$INSTALL_DIR/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-stream
command_status_check "Nginx - 平台环境检查失败!"
make -j 4
command_status_check "Nginx - 编译失败!"
make install
command_status_check "Nginx - 安装失败!"
mkdir -p $INSTALL_DIR/nginx/conf/vhost
alias cp=cp ; cp -rf $PWD_C/nginx.conf $INSTALL_DIR/nginx/conf
rm -rf $INSTALL_DIR/nginx/html/*
echo "ok" > $INSTALL_DIR/nginx/html/status.html
echo '<?php echo "ok"?>' > $INSTALL_DIR/nginx/html/status.php
$INSTALL_DIR/nginx/sbin/nginx
command_status_check "Nginx - 启动失败!"
}
function install_php() {
cd $TMP_DIR
yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
libcurl-devel libjpeg-devel libpng-devel openssl-devel \
libmcrypt-devel libxslt-devel libtidy-devel
wget http://docs.php.net/distributions/php-${PHP_V}.tar.gz
tar zxf php-${PHP_V}.tar.gz
cd php-${PHP_V}
./configure --prefix=$INSTALL_DIR/php \
--with-config-file-path=$INSTALL_DIR/php/etc \
--enable-fpm --enable-opcache \
--with-mysql --with-mysqli --with-pdo-mysql \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-freetype-dir \
--enable-mbstring --enable-hash
command_status_check "PHP - 平台环境检查失败!"
make -j 4
command_status_check "PHP - 编译失败!"
make install
command_status_check "PHP - 安装失败!"
cp php.ini-production $INSTALL_DIR/php/etc/php.ini
cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
command_status_check "PHP - 启动失败!"
}
read -p "请输入编号:" number
case $number in
1)
install_nginx;;
2)
install_php;;
3)
install_mysql;;
4)
install_nginx
install_php
;;
9)
exit;;
esac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南