拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Linux
  3. Shell编程
  4. 正文

Linux Shell编程—案例100之(21-30)

2024年4月24日 1101点热度 0人点赞 0条评论

21-31的shell实例脚本,这里粘贴的都是经过本人的实际实验环境调试实现的,仅供参考。

Eg21、关于for-loop_and_break的运用。

#!/bin/bash

## filename: for-loop_and_break.sh

i=1

for day in Mon Tue Wed Thu Fri

do

echo "Weekday $((i++)) : $day"

if [ $i -eq 3 ]; then

break

fi

done

 

 

Eg22、关于for-loop_and_continute的运用。

 

#!/bin/bash

## filename: for-loop_and_continue.sh

i=1

for day in Mon Tue Wed Thu Fri Sat Sun

do

echo -n "Day $((i++)) : $day"

if [ $i -eq 7 -o $i -eq 8 ]; then

echo " (WEEKEND)"

continue

fi

echo " (weekday)"

done

 

#set -x

msg="This is a test massage."

for name in `cat mail_list` ; do

if [[ $name == boy || $name == "dx1a" ]]

then continue

else mail $name <<< "$msg"

fi

Done

 

 

 

 

测试失败。但是以及达到跳出continue这个了。

注意:

1、需要安装mailutils和ssmtp:apt install mailutils && apt install ssmtp;

同时需要配置ssmtp.conf 和revealiases文件以及对应的邮箱参数。

2、<<< 是用于输入单行文本的重定向符号。它的一般用法是:

command <<< "text"

在这个语法中,command 是要执行的命令,"text" 是要输入的单行文本。<<< 将会将"text"的内容传递给command作为标准输入。 例如: echo <<< "Hello, World!"

因此,<< 用于输入多行文本,而 <<< 用于输入单行文本,要加引号"才算一行。这两个符号在shell脚本中经常用于向命令传递输入。

现在修改配置文件:

a、修改ssmtp.conf

 

b、修改mail_list内容

 

再运行则提示成功:

 

 

Eg23、关于for-c的运用(c语言实现计数循环)。

#!/bin/bash

## filename: for--C-style.sh

for ((i=0;i<10;i++)) ; do echo $i; done

for (( i=1; i <= 10; i++ ))

do

echo "Random number $i: $RANDOM"

done

for ((i=1, j=10; i <= 5 ; i++, j=j+5)) ; do

echo "Number $i: $j"

done

 

 

Eg24、关于for-c的运用(c语言实现求和运算)。

#!/bin/bash

## filename: for--C-style_sum.sh

s=0

for ((i=1;i<=100;i++)) ; do let s=$s+$i ; done

echo sum1..1001..100=$s

for ((s=0,i=1;i<=100;i++)) ; do ((s+=i)) ; done

echo sum1..1001..100=$s

for ((s=0,i=1;i<=100;s+=i,i++))

do

: # 空语句

done

# for ((s=0,i=1;i<=100;s+=i,i++)) ; do : ; done

echo sum1..1001..100=$s

 

 

Eg25.关于for-c的运用(批量添加用户)

#!/bin/bash

## filename: addusers_for_C-style.sh

# 成批添加10个用户

for (( n=1; n<=10; n++ ))

do

if ((n<10))

then st="st0${n}"

else st="st${n}"

fi

useradd $st

echo "centos"|passwd --stdin $st

chage -d 0 $st

done

这里没有在本机运行,之前sy6中以及验证,这里就不添加用户的实例操作了。

不过注意:

 

请童鞋自己验证!

Eg25、while语句实例-猜数字

#!/bin/bash

## filename: while--guess_number.sh

# $RANDOM是一个系统随机数的环境变量,模100运算用于生成1-100的随机整数

num=$((RANDOM%100))

# 使用永真循环、条件退出(break)的方式接收用户的猜测并进行判断

while :

do

read -p "Please guess my number [0-99]: " answer

if [ $answer -lt $num ]

then echo "The number you inputed is less then my NUMBER."

elif [[ $answer -gt $num ]]

then echo "The number you inputed is greater then my NUMBER."

elif ((answer==num))

then echo "Bingo! Congratulate: my NUMBER is $num." ; break

fi

done

 

 

Eg26、while语句实例-输入重定向读文件

#!/bin/bash

## filename: while--read_file.sh

file=/etc/resolv.conf

while IFS= read -r line

do

# echo line is stored in $line

echo $line

done < "$file"

while IFS=: read -r user enpass uid gid desc home shell

do

# only display if UID >= 500

[ $uid -ge 500 ] && echo "User $user ($uid) assigned \"$home\" home directory with $shell shell."

done < /etc/passwd

 

这个例子自己理解下。

Eg27、while实例-替换有空格的文件名,改为下划线

 

使用管道为 while 传递输入

#!/bin/bash

## filename: while-rename_filename.sh

# 找出当前目录下包含空格的文件名,将空格替换为下划线

DIR="."

find $DIR -type f | while read file; do

# using POSIX class [:space:] to find space in the filename

if [[ "$file" = *[[:space:]]* ]]; then

# substitute space with "_" character (rename the filename)

mv "$file" $(echo $file | tr ' ' '_')

fi

done

 

 

Eg28、while循环实例-

#!/bin/bash

## filename: /etc/cron.daily/monitor_disk_space.cron

# set admin email so that you can get email

ADMIN="xh_ry@163.com"

# set alert level 90% is default

ALERT=90

LANG=C

df -PH|egrep -v '^Filesystem|tmpfs|cdrom'|awk '{ print $5 " " $1 }' | while read output;

do

usep=$(echo $output | awk '{ print $1 }' | cut -d'%' -f1 )

partition=$(echo $output | awk '{ print $2 }' )

if [ $usep -ge $ALERT ]; then

( echo -n "Running out of space "

echo -n \"$partition ($usep%)\"

echo -n " on \"$(hostname)\" as on \"$(date)\"."

)| mail -s "Alert: Almost out of disk space $usep" $ADMIN

fi

Done

这里直接执行了就会一直发送给xh_ry@163.com 的邮件了。

 

 

 

所以要中止,需要关闭linux或者killall 28eg.sh

Eg29、until实例-host-online

#!/bin/bash

## filename: until-host_online_to_ssh.sh

read -p "Enter IP Address:" ipadd

echo $ipadd

until ping -c 1 $ipadd &> /dev/null

do

sleep 60

done

ssh $ipadd

 

 

Eg30、

#!/bin/bash

## filename: until-user_online_to_write.sh

username=$1

if [ $# -lt 1 ] ; then

echo "Usage: `basename $0` <username> [<message>]"

exit 1

fi

if grep "^$username:" /etc/passwd > /dev/null ; then :

else

echo "$username is not a user on this system."

exit 2

fi

until who|grep "$username" > /dev/null ; do

echo "$username is not logged on."

sleep 6

done

shift ; msg=$*

[[ X"$msg" == "X" ]] && msg="Hello, $username"

echo "$msg" | write $username

 

这个例子的情况不是很好,后续会更新。

Eg31、while-until-for综合实例

#!/bin/bash

## filename: while-until-for_sum.sh

# 使用当型循环求 sum(1..100)

((i=0,s=0)) # i=0 ; s=0

while ((i<100)) ; do ((i++,s+=i)) ; done

echo sum1..1001..100=$s

# 使用直到型循环求 sum(1..100)

((i=0,s=0))

until ((i==100)) ; do ((i++,s+=i)) ; done

echo sum1..1001..100=$s

# 使用C风格的 for 循环求 sum(1..100)

for ((s=0,i=1;i<=100;s+=i,i++)) ; do : ; done

echo sum1..1001..100=$s

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xh_w20/article/details/137997886

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2024年4月25日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号