一、shell脚本:for循环-实战案例
(一)for循环是什么、以及各式
1、除了 while 循环和 until 循环,Shell 脚本还提供了 for 循环,它更加灵活易用,更加简洁明了。Shell for 使用形式如下:
#格式一
for var in item1 item2 ... itemN
do
内容方法体
done
#格式二:写成一行
for var in item1 item2 ... itemN; do command1; command2… done;
2、for循环所使用的参数(截图部分):
3、for循环所使用的参数(内容部分,方便复制):
for循环所使用的参数 | |
命令 | 作用 |
-e | 判断对象是否存在 |
-d | 判断对象是否存在,并且为目录 |
-f | 判断对象是否存在,并且为常规文件 |
-L | 判断对象是否存在,并且为符号链接 |
-h | 判断对象是否存在,并且为软链接 |
-s | 判断对象是否存在,并且长度不为0 |
-r | 判断对象是否存在,并且可读 |
-w | 判断对象是否存在,并且可写 |
-x | 判断对象是否存在,并且可执行 |
-O | 判断对象是否存在,并且属于当前用户 |
-G | 判断对象是否存在,并且属于当前用户组 |
-nt | 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ] |
-ot | 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ] |
(二)for循环操作案例
2.1: 使用for循环读文件并打印文件内容
#!/bin/bash
content=$(cat ./1.log)
for i in $content
do
echo $i
done
2.2:顺序输出当前列表中的数字、字符
注意,每个字符之间是有空格的
#1、按顺序输出当前列表中的数字
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
#2、按顺序输出当前列表中的数字
for str in This is a string
do
echo $str
done
3、for循环实现一个目录下的文件和目录遍历(很实用)
#!/bin/bash
#方法一:打印出所有文件
for file in /home/*
do
if [ -d "$file" ]
then
echo "$file is directory"
elif [ -f "$file" ]
then
echo "$file is file"
fi
done
#方法二:递归遍历
#! /bin/bash
read_dir(){
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
then
read_dir $1"/"$file
else
echo $1"/"$file #在此处处理文件即可
fi
done
}
#读取第一个参数
read_dir $1
4、Shell遍历目标目录和子目录下的所有文件
#!/bin/bash
function getdir(){
for element in `ls $fd`
do
dir_or_file=$fd"/"$element
if [ -d $dir_or_file ]
then
getdir $dir_or_file
else
echo $dir_or_file
fi
done
}
root_dir="~/Downloads"
getdir $root_dir
二、shell脚本:while循环-实战案例
(一)while循环是什么、以及各式
1、while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。只有表达式为真,do和done之间的语句才会执行,表达式为假时,结束循环(即条件成立就一直执行循环)
格式一:
while [条件]
do
操作
done
格式二:
while read line
do
操作
done < file
(二)while循环操作案例
1. 循环输出1-10的数字
#!/bin/bash
num=1
while [ $num -le 10 ]
do
echo $num
num=$(( $num + 1 ))
done
2. 使用while读文件并打印文件内容
echo "方法1:读出并打印所有行"
while read line
do
echo $line
done <./1.log
echo "方法2:读取并打印(注意log后面有个管道符号"
cat ./1.log |
while read line
do
echo $line
done
3. 输出两数相乘的值
#!/bin/bash
num=1
while [ $num -lt 10 ]
do
sum=$(( $num * $num))
echo "$num * $num = $sum"
((num++))
done
4.创建指定文件里的用户
指定文件 name.txt 里面包含 zhangsan lisi wangwu。从name.txt里面遍历用户名并创建用户
#!/bin/bash
for name in `cat ./name.txt`
do
id $name &> /dev/null
if [ $? -ne 0 ];then
useradd $name
echo "123456" |passwd --stdin $name &> /dev/null
echo "user $name created"
else
echo "user $name is exist"
fi
done