《shell的流程控制:条件语句、循环结构、switch》

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大大钢琴

喜欢!就请他吃3块钱好吃的吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值