shell循环结构之for循环
2017-08-18 17:21
344 查看
for循环
语法:
1)
for 变量 in 取值列表; do
statement
statement
done
2)
for 变量 in 取值列表
do
statement
statement
done
取值列表:
数字
10 20 30
使用seq命令生成数字的序列
seq 10
seq 3 10
seq 1 2 10
字符
aa bb cc
文件
编写脚本,计算1---100的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
done
echo $sum
编写脚本,计算1--100所有奇数的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -ne 0 ]; then
let sum=$sum+$i
fi
done
echo $sum
编写脚本,实现批量创建用户user1...user10
#!/bin/bash
#
for i in `seq 10`; do
if ! id user$i &> /dev/null; then
useradd user$i
echo "redhat" | passwd --stdin user$i &> /dev/null
echo "用户user$i创建完成,初始密码为redhat"
else
echo "用户user$i已经存在"
fi
done
编写脚本,检测172.16.20.0/24在线主机IP
#!/bin/bash
#
network=172.16.20.
for i in `seq 254`; do
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
done
启动多线程:
#!/bin/bash
#
network=172.16.80.
for i in `seq 254`; do
{
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
}&
done
wait
以字符作为取值列表
#!/bin/bash
#
for name in alice natsha kira merry; do
useradd $name
echo "$name create finished."
done
以文件作为取值列表
`cat FILE`
编写脚本,向系统中所有用户打招呼
#!/bin/bash
#
for i in `awk -F: '{print $1}' /etc/passwd`; do
echo "Hello, $i"
done
编写脚本, 将某目录下所有以.txt结尾的文件改为以.mp3结尾
#!/bin/bash
#
for i in `ls -l /tmp/test | grep "txt$" | awk '{print $9}'`; do
file_name=`echo $i | awk -F. '{print $1}'`
mv /tmp/test/$i /tmp/test/$file_name.mp3
done
编写脚本, 分别统计/bin/bash和/sbin/nologin用户的个数
#!/bin/bash
#
bash_number=0
nologin_number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=$(head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}')
case $sh_name in
/sbin/nologin)
let nologin_number=$nologin_number+1
;;
/bin/bash)
let bash_number=$bash_number+1
;;
esac
done
echo "shell为/bin/bash的:$bash_number"
echo "shell为/sbin/nologin的:$nologin_number"
编写脚本,显示九九乘法表
#!/bin/bash
#for嵌套for循环
#9*9乘法口诀
echo "for的九九乘法表"
for(( i=1 ;i<=9;i++ ))
do
for(( j=1;j<=9;j++ ))
do
#当$j小于等于$i,在屏幕上打印乘法表
[ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ] "
done
echo ''
done
中断循环的语句
break 中断整体循环
continue 中断本次循环
break用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
if [ $sum -ge 3000 ]; then
echo $i
break
fi
done
continue用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -eq 0 ]; then
continue
fi
let sum=$sum+$i
done
echo $sum
编写脚本,列出系统中shell为/bin/bash的前5个用户名
#!/bin/bash
#
number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}'`
if [ $sh_name == "/bin/bash" ]; then
name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $1}'`
echo -n "$name "
let number=$number+1
if [ $number -eq 5 ]; then
break
fi
fi
done
echo
语法:
1)
for 变量 in 取值列表; do
statement
statement
done
2)
for 变量 in 取值列表
do
statement
statement
done
取值列表:
数字
10 20 30
使用seq命令生成数字的序列
seq 10
seq 3 10
seq 1 2 10
字符
aa bb cc
文件
编写脚本,计算1---100的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
done
echo $sum
编写脚本,计算1--100所有奇数的和
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -ne 0 ]; then
let sum=$sum+$i
fi
done
echo $sum
编写脚本,实现批量创建用户user1...user10
#!/bin/bash
#
for i in `seq 10`; do
if ! id user$i &> /dev/null; then
useradd user$i
echo "redhat" | passwd --stdin user$i &> /dev/null
echo "用户user$i创建完成,初始密码为redhat"
else
echo "用户user$i已经存在"
fi
done
编写脚本,检测172.16.20.0/24在线主机IP
#!/bin/bash
#
network=172.16.20.
for i in `seq 254`; do
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
done
启动多线程:
#!/bin/bash
#
network=172.16.80.
for i in `seq 254`; do
{
if ping -c 1 -W 1 $network$i &> /dev/null; then
echo "Host $network$i is up"
fi
}&
done
wait
以字符作为取值列表
#!/bin/bash
#
for name in alice natsha kira merry; do
useradd $name
echo "$name create finished."
done
以文件作为取值列表
`cat FILE`
编写脚本,向系统中所有用户打招呼
#!/bin/bash
#
for i in `awk -F: '{print $1}' /etc/passwd`; do
echo "Hello, $i"
done
编写脚本, 将某目录下所有以.txt结尾的文件改为以.mp3结尾
#!/bin/bash
#
for i in `ls -l /tmp/test | grep "txt$" | awk '{print $9}'`; do
file_name=`echo $i | awk -F. '{print $1}'`
mv /tmp/test/$i /tmp/test/$file_name.mp3
done
编写脚本, 分别统计/bin/bash和/sbin/nologin用户的个数
#!/bin/bash
#
bash_number=0
nologin_number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=$(head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}')
case $sh_name in
/sbin/nologin)
let nologin_number=$nologin_number+1
;;
/bin/bash)
let bash_number=$bash_number+1
;;
esac
done
echo "shell为/bin/bash的:$bash_number"
echo "shell为/sbin/nologin的:$nologin_number"
编写脚本,显示九九乘法表
#!/bin/bash
#for嵌套for循环
#9*9乘法口诀
echo "for的九九乘法表"
for(( i=1 ;i<=9;i++ ))
do
for(( j=1;j<=9;j++ ))
do
#当$j小于等于$i,在屏幕上打印乘法表
[ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ] "
done
echo ''
done
中断循环的语句
break 中断整体循环
continue 中断本次循环
break用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let sum=$sum+$i
if [ $sum -ge 3000 ]; then
echo $i
break
fi
done
continue用法:
#!/bin/bash
#
sum=0
for i in `seq 100`; do
let ys=$i%2
if [ $ys -eq 0 ]; then
continue
fi
let sum=$sum+$i
done
echo $sum
编写脚本,列出系统中shell为/bin/bash的前5个用户名
#!/bin/bash
#
number=0
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in `seq $line`; do
sh_name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $7}'`
if [ $sh_name == "/bin/bash" ]; then
name=`head -n $i /etc/passwd | tail -1 | awk -F: '{print $1}'`
echo -n "$name "
let number=$number+1
if [ $number -eq 5 ]; then
break
fi
fi
done
echo
相关文章推荐
- 2、shell条件测试,运算符,选择结构,for循环结构
- [9-13]Shell系列4――循环结构for、while、until及跳出循环
- 13_Shell语言―――语言控制结构之for循环语句
- shell中的3种for循环结构
- Java 循环结构 - for, while 及 do...while
- shell脚本下的教你如果运用for,while,unti循环,以及区别l
- 黑马程序员_java编程基础第3天1-5 循环结构while;do while;for
- shell基础学习中的字符串操作、for循环语句示例
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select
- Shell for&while 循环详细总结
- 20170208--shell-for-while循环+小脚本文件的备份
- GO学习笔记 - Go 只有一种循环结构—— for 循环。
- shell脚本学习9——循环指令:for、while、until
- shell脚本编程循环之for/while/untill循环
- [iOS]C语言技术视频-06-程序循环结构(for{})
- Shell脚本入门(九) - 循环控制语句:for in
- for循环结构常用实例介绍
- shell中for循环用法
- Shell基础之for循环语句
- linux中的for、while循环输出中赋值变量及shell中循环获取脚本参数