shell 脚本循环语句与函数

循环语句

循环和遍历

循环

循环:重复执行一段代码的结构。只要条件满足,就可以多次执行相同的代码。

循环体和循环条件

循环条件满足,循环体将一直执行,直到循环条件不再满足为止。

遍历

遍历:对数据结构当中每个元素进行访问的过程,对循环体中的定义的对象(变量)进行操作或者输出

循环和遍历的区别

循环是一种控制流程的结构

遍历只是对变量数据的操作过程

循环:

1 涉及到重复性质的操作,可以用循环来代替。

2 提高代码的重复利用率

3 提高程序的效率

循环的语法

for循环

for循环:用于已知循环次数的场景

for 变量名 in 取值范围

do

命令序列

done

for循环类C语言格式

for((表达式1;表达式2;表达式3;))

表达式1:定义变量,给它一个起始值

表达式2:循环范围

表达式3:定义如何循环

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

数字累加求和

累加求和判断奇数和偶数

累加求和的核心:每一次循环的值累加

脚本开关调试模式

set -x:开启调试模式

set +x:关闭调试模式

for双层循环和循环控制语句

echo的其他用法

echo:后面什么都不跟表示换行

echo -n:表示不换行输出

echo -e:输出转义字符

常用的转义字符

\b:相当于退格键

\n:另起一行输出,也相当于换行

\t:相当于输出一个TAB键

外循环打印行

外循环循环1-9

内循环打印列

内循环每一次都走1-5

循环控制语句

continue

continue:满足条件时,跳出本次循环,但是循环条件如果继续存在,则继续执行后面的循环。#(满足条件就会跳出本次循环,继续下一次循环)

continue 2 跳出两次

虽然我跳出了这一次,如果后面还有循环条件,还会继续执行

break

break:跳出循环,满足条件即刻退出,不再执行后续循环。

break 2 跳出两次

满足了条件直接终止,不再执行

exit

exit:如果满足条件直接退出,任何可执行条件都不执行立刻退出

只要触发了条件直接终止

猜数字,设置一个随机数,比这个数大,提示用户输大了,比他小,提示输小了,等于,猜对了。猜不对退不出去,直到才对位置

for((;;)):死循环

生成随机数:$RANDOM(默认范围是0-32767)

$((RANDOM%100+1)):1-100

同时打印出一共猜了多少次。

while 语句

for:用于已知循环次数

while语句:用于不知道循环次数,需要主动结束循环,或者达到条件结束循环。(一般用于写死循环)

while [ 判断条件 ]

do

执行命令(命令序列)

done

写死循环的两种方式;

while true

while [ 1 -eq 1 ]

until语句

条件不成立才能循环执行,一旦条件成立,才会终止循环。

until [ 条件判断 ]

do

命令序列

let i++

done

练习题

用户输入密码,脚本用来判断密码是否正确,密码是123456,输入正确,提示用户输入无误,连续输错三次。密码将被锁定(提示)

1.计算从1到100所有整数的和(三种方式)

#第1种方法
sum=0
for ((i=0;i<=100;i++))
do
sum=$(($sum+$i))
done
echo $sum

#第二种方法
sum=0
i=1
while [ $i -le 100 ]
do
sum=$(($i+$sum))
let i++
done
echo $sum

#第3种方法
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$(($i+$sum))
let i++
done
echo $sum


2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

sum=0
read -p "请输入一个小于100的数字:" num
for ((i=0;i<=$num;i++))
do
sum=$(($sum+$i))
done
echo $sum

3.求从1到100所有整数的偶数和、奇数和

num1=0
num2=0
i=1
while [ $i -le 100 ]
do
if [ $(($i%2)) -eq 0 ]
then
num1=$(($num1+$i))
elif [ $(($i%2)) -eq 1 ]
then
num2=$(($num2+$i))
fi
let i++
done
echo $num1
echo $num2

4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,
输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;
若该用户不存在,提示用户输入密码,建立用户并设立其密码

for i in $(cat /opt/users.txt)
do
echo "用户" $i
cat /etc/passwd | awk -F: '{print $1}'| grep $i
  if [ $? == "0" ]
  then
  echo "用户已存在"
c=$(cat /etc/shadow | grep "$i" | awk -F: '{print $2}')
  if [ ${c} == "!!" ]
  then
  echo "用户已存在,但没有设置密码"
  echo 123456 | passwd --stdin ${i}
  fi
  else
  echo "用户不存在"
  useradd ${i}
  echo 123456 | passwd --stdin ${i}
  echo "密码添加成功"
  fi
done

5. 0到255 之间的十进制数转换成8位数二进制数

read -p "请输入一个数字:" num
for i in 128 64 32 16 8 4 2 1
do
 if [ $num -ge $i ]
 then
 num=$(($num-$i))
 echo -n "1"
 else
 echo -n "0"
 fi
done
echo

6.某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,
又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?

sum=1
for i in {1..9}
do
sum=$(($sum+1))
sum=$(($sum*2))
done
echo $sum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值