将某代码段重复运行多次,通常有 进入循环的条件 和 退出循环的条件。
逻辑:程序先进入语句判断,如真则执行循环语句,然后再进行语句判断,直到语句判断失败才退出。
for NAME [ in WORDS ... ] ; do CMD1 ; done
依次将列表中的元素赋值给 "变量名";每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束。
如果省略 [ in WORDS ... ],此时使用位置参数变量 in "$@"。
第一个命令是一个脚本文件,可以接受 标准输入参数 作为循环变量。
第二个命令是在终端中直接运行的一行命令,它使用 硬编码的字符串列表 作为循环变量。
使用 for 循环来遍历一个 数字范围 并打印出结果的命令。
使用 for 循环来 遍历当前目录下所有以 ".sh" 结尾的文件,并打印出这些文件的名称 bash /root/$i
sum=0:在脚本中初始化一个变量 sum,用于存储累加的和。
for i in {1..100}; do:这部分是循环的头部,使用 for 循环遍历从 1 到 100 的整数范围。${1..100} 是 Bash 的一个特性,它展开成一个包含从 1 到 100 的整数序列的列表。
let sum+=i:在循环体内,这行命令将当前循环变量 i 的值加到变量 sum 上,实现了累加操作。
echo sum=$sum:这行命令在循环结束后打印出累加的和。${sum} 会被替换为变量 sum 的值,然后将结果打印出来。
生成一个 带有彩色星号的矩阵图案,其中颜色通过 ANSI 转义码进行控制。
这个脚本 使用嵌套的循环生成一个 6x6 的矩阵,每个位置都填充了一个带有随机颜色的星号。脚本运行后,您会看到一个具有不同颜色星号的矩阵图案。
echo -e "\E[1;$[RANDOM%7+31]m*\E[0m\c"
echo -e "\E[5;1;$[RANDOM%7+31]m*\E[0m\c"
echo -e "\E[5;1;$[RANDOM%7+31]m ${i}x${j}=$[i*j] \E[0m \t\c"
for (( exp1; exp2; exp3 )); do COMMANDS; done
for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式 ))
for (( sum=0,i=1; i<=100; i++ )); do
echo -e "\E[5;1;$[RANDOM%7+31]m ${i}x${j}=$[i*j] \E[0m \t\c"
[ 创建了 10 个用户,为每个用户生成随机密码,并将用户名和密码写入日志文件。 ]
PASS=`cat /dev/urandom | tr -dc '[:alnum:]' |head -c12`
echo $PASS | passwd --stdin user$i &> /dev/null
echo user$i: $PASS >> /root/user.log
范例 2 :将指定目录下的文件所有文件的后缀改名为 bak 后缀。
mkdir -p /data/test && cd /data/test
cd $DIR || { echo 无法进入 $DIR; exit 1; }
PRE=`echo $FILE | grep -Eo ".*\."`
范例 3 :要求将目录 YYYY-MM-DD/ 中所有文件,移动到 YYYY-MM/DD/ 下
for i in {1..365}; do # 循环从 1 到 365
DIR=$(date -d "-$i day" +%F) # 根据当前日期倒推 i 天的日期格式
mkdir -pv $PDIR/$DIR # 创建子目录,-p 表示递归创建目录,-v 表示显示创建的目录
for j in {1..10}; do # 循环从 1 到 10
touch $RANDOM.log # 创建一个随机名称的日志文件
cd $DIR || { echo 无法进入 $DIR; exit 1; } # 切换到目标目录,如果失败则显示错误信息并退出
for subdir in *; do # 遍历目录下的子目录
YYYY_MM=$(echo $subdir | cut -d"-" -f1,2) # 提取子目录名的前两部分,即年月
DD=$(echo $subdir | cut -d"-" -f3) # 提取子目录名的第三部分,即日
[ -d $YYYY_MM/$DD ] || mkdir -p $YYYY_MM/$DD &> /dev/null # 如果目标日期子目录不存在,则创建
mv $subdir/* $YYYY_MM/$DD # 将子目录下的文件移动到目标日期子目录中
范例 4 :扫描一个网段:10.0.59.0/24,判断此网段中主机在线状态,将在线的主机的IP打印出来。
if ping -c1 -W1 $NET.$ID &> /dev/null; then
echo $NET.$ID is up | tee -a host_list.log
2、添加 10 个 用户 user1-user10,密码为 8 位随机字符。
3、/etc/rc.d/rc3.d 目录下分别有多个以 K 开头和以 S 开头的文件;分别读取每个文件,以 K 开头的输出为文件加 stop,以 S 开头的输出为文件名加start,如 K34filename stop S66filename start。
4、编写脚本,提示输入正整数 n 的值,计算 1+2+…+n 的总和。
6、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态。
8、在 /testdir 目录下创建10个 html 文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html。
10、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少?
标签:语句,do,Shell,sum,echo,循环,done,bash From: https://www.cnblogs.com/wuhanjiayou/p/17862897.html