目录
一、for循环语法
二、while循环语法
三、until循环语法
四、8道案例练习
五、知识点总结
1、循环语句for,while,until用法
2、if 条件判断 (文件、整数、字符串、多重条件判断)
3、四则运算
前言:数据类的shell案例我找到的很少,网上的shell案例实战更多是运维方向的。自己现在还是shell学习阶段,以后会多整理数据开发、ETL开发
中如何运用shell脚本
,目前文章更多是shell中某一个语法。
循环语句:Bash Shell中主要提供了三种循环方式:for、while和until。
首先我们先看这三种循环的语法。
一、for循环语法
列表for循环:用于将一组命令执行已知的次数
语法一:
for variable in {list} #variable 变量
do
command #command 命令行
command
…
done
语法二:
for variable in a b c
do
command
command
done
# for var in 1 2 3 4 5;do echo $var;done
语法三:
类C风格的for循环
for(( expr1;expr2;expr3 ))
do
command
command
…
done
#expr1:定义变量并赋初值
#expr2:决定是否进行循环(条件)
#expr3:决定循环变量如何改变,决定循环什么时候退出
举例
# for ((i=1;i<=5;i++));do echo $i;done
# for ((i=1;i<=10;i+=2));do echo $i;done
# for ((i=2;i<=10;i+=2));do echo $i;done
二、while循环语法
特点:条件为真就进入循环;条件为假就退出循环
i=1
while expression #expression表达式,eg:[ 1 -eq 1 ] (( 1 >= 1 ))
#while首先进行条件测试,如果条件测试为真,则进入循环,执行命令区域,否则不进入循环
do
command
command
done
举例
i=1
while [ $i -le 5 ] #当变量i小于5时,执行下面的循环体中的命令
do
echo $i
let i++
done
三、until循环语法
特点:条件为假就进入循环;条件为真就退出循环
until expression #expression表达式,eg:[ 1 -eq 1 ] (( 1 >= 1 ))
do
command
command
...
done
举例
i=1
until [ $i -gt 5 ] #gt大于,当变量i大于5不成立的时候,执行下面的循环体中的命令
do
echo $i
let i++
done
四、案例练习
练习题
1、用for循环/home/study/study_shell目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的文件
2、使用for循环、while循环计算100以内的偶数和
3、使用for循环打印9*9乘法表
4、使用while循环打印9*9乘法表
5、使用for循环计算100以内的奇数和
6、使用while循环计算100以内的奇数和
7、使用类C风格的 for循环计算100以内的奇数和
8、判断所输整数是否为质数
1、用for循环/home/study/study_shell目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的文件
#!/bin/bash
#path:/home/study/study_shell
#1、用for循环在/home/study/study_shell目录下创建aaa1-aaa10目录
#2、然后在aa1-aaa10创建bbb1-bbb10的目录(在aaa1目录中创建bbb1-bbb10的文件,在aaa2目录中创建bbb1-bbb10的文件)
for i in `seq 10`
do
mkdir /home/study/study_shell/aaa$i
cd /home/study/study_shell/aaa$i
for j in `seq 10`
do
touch bbb$j
done
done
说明:
(1)seq 用于产生从某个数到另外一个数之间的所有整数
2、使用for循环、while循环计算100以内的偶数和
2.1、for循环计算100以内的偶数和
#!/bin/bash
#使用for循环计算100以内的偶数和
sum=0
for i in {1..100}
do
if [ $[$i%2] -eq 0 ];then #eq等于,%取余
sum=$[$sum+$i]
fi
done
echo "100以内的偶数和为${sum}"
说明:
(1){1..100}
会生成一个空格分隔的数字序列字符串
(2)if [ $[$i%2] -eq 0 ]
,条件判断之判断整数,当变量除以2的余数等于0成立时,执行下面的步骤
条件判断语法
语法1: test 条件表达式
#test -e file 只要文件存在条件为真
语法2: [ 条件表达式 ]
#[ $[id -u] -eq 0 ]
#[ $[$i%2] -eq 0 ]
语法3: [[ 条件表达式 ]] 支持正则 =~
语法4:类C风格的数值比较
#(($[$a%2]==0));echo $?
参考文档:黑马程序员课件___条件判断 (文件、整数、字符串、多重条件判断)
(3)[$i%2]、[$sum+$i]
,四则运算。
四则运算语法:
语法1: $(( ))
#echo $((1+1))或者a=$((1+1))
语法2:$[ ]
#echo $[10-5]或者a=$[10-5]
语法3:expr
#expr 10 / 5
语法4:let
#n=1;let n+=1 等价于 let n=n+1
2.2、while循环计算100以内的偶数和
#!/bin/bash
#使用while循环计算100以内的偶数和
i=1
sum=0
while [ $i -lt 101 ]
do
if [ $[$i%2] -eq 0 ];then
sum=$[$sum+$i]
fi
let i+=1
#let i+=1 等于let n=n+1
done
echo "100以内的偶数和为${sum}"
3、使用for循环打印9*9乘法表
#!/bin/bash
#使用for循环打印9*9乘法表
for i in `seq 9`
do
for j in `seq $i`
do
echo -n "$j*$i=$[$j*$i] "
#echo -n 不换行输出
done
echo
done
说明
(1)echo -n 不换行输出
(2)单独一个echo,作用是换行
4、使用while循环打印9*9乘法表
#!/bin/bash
#使用while循环打印9*9乘法表
i=1
while [ $i -le 9 ]
do
j=1
while [ $j -le $i ]
do
echo -n "$j*$i=$[$j*$i] "
let j++
done
let i++
echo
done
说明
(1)let j++等于let n=n+1
5、使用for循环计算100以内的奇数和
#!/bin/bash
#使用for循环计算100以内的奇数和
sum=0
for i in {1..100..2}
do
let sum=sum+i
done
echo "100以内的奇数和为:${sum}"
说明:
(1) {1..100..2}
用于产生从1到100之间的所有整数,整数之间的间隔是2
(2)let sum=sum+i
四则运算
6、使用while循环计算100以内的奇数和
#!/bin/bash
#使用while循环计算100以内的奇数和
i=1
sum=0
while [ $i -le 100 ]
do
if [ $[$i%2] -eq 1 ];then
sum=$[$sum+$i]
fi
let i++
done
echo "100以内的奇数和为:${sum}"
感想:
这个代码看着就6行,挺简单的,但写的时候改了5个地方才能正常运行。就像SQL一样看着很简单,但在实际业务过程中会遇见很多问题。还是要多多练习。
7、使用类C风格的 for循环计算100以内的奇数和
类C风格的for循环语法:
for(( expr1;expr2;expr3 ))
do
command
command
…
done
#expr1:定义变量并赋初值
#expr2:决定是否进行循环(条件)
#expr3:决定循环变量如何改变,决定循环什么时候退出
举例
# for ((i=1;i<=5;i++));do echo $i;done
# for ((i=1;i<=10;i+=2));do echo $i;done
# for ((i=2;i<=10;i+=2));do echo $i;done
练习
#!/bin/bash
#使用类C风格的for循环计算100以内的奇数和
sum=0
for ((i=1;i<=100;i+=2))
do
let sum=sum+i
done
echo "100以内的奇数和为:${sum}"
8、判断所输整数是否为质数
#!/bi /bash
#判断所输整数是否为质数
#质数除了本身和1以外并没有任何其他因子
#质数表:2 3 5 7 11 13 17 19 23 29
read -p "请输入一个正整数:" number
if [ $number -eq 1 ];then
echo "${number}不是质数"
elif [ $number -eq 2 ];then
echo "${number}是质数"
else
for i in `seq 2 $[$number-1]`
do
if [ $[$number%$i] -eq 0 ];then
echo "${number}不是质数"
exit
fi
done
echo "${number}是质数"
fi
说明:
(1)if语法结构
语法一:if...else结构
if [ condition ];then
command1
else
command2
fi
语法二:if...elif...else结构
if [ condition1 ];then
command1 结束
elif [ condition2 ];then
command2 结束
else
command3
fi
五、知识点总结
1、循环语句for,while,until用法
文章位置:所有内容都涉及
2、 if 条件判断 (文件、整数、字符串、多重条件判断)
文章位置:四、案例练习___8、判断所输整数是否为质数
文章位置:四、案例练习___2、使用for循环、while循环计算100以内的偶数和
文章位置:四、案例练习___6、使用while循环计算100以内的奇数和
参考文档:黑马程序员课件___条件判断 (文件、整数、字符串、多重条件判断)
3、四则运算
文章位置:四、案例练习___2、使用for循环、while循环计算100以内的偶数和
4、感想
shell语法真的很乱,比如条件判断就有4中语法,并且数字和文件的条件判断语法还不是一样的.关于if条件判断,for循环,以及四则运算在文章中都涉及了.以后在工作中如果遇见相应的问题在看这篇文章总结把
--------------------------------20201228星期一中午----------------------------------------
shell现在就不在放假时间单独学习了,如果要学习就在工作的时间学习。现在要开始做项目了【不过周末关于循环的学习、以及定义函数的学习还是非常棒棒的】
在公司里面shell学习下
1、awk的使用+shell时间的处理——20201228、29学习计划
2、grep的使用
2、复习下文件的if操作
4、重点学习下shell链接数据库的操作,用shell加载数据到数据库,用shell从数据库里面导数据
5、在学习下shell对文件的操作,就是把文件从一个地方放在另外一个地方
6、剩下的就是记一下面试题吧,毕竟自己也只能写一些简单的函数,没有参与过真实的项目实战。
…………最近总是失眠,中午失眠,晚上失眠。明明周末两天都在图书馆还特别有罪恶感,学习了还感觉自己什么都没学习一样。最近应该是压力太大了(明年想找个更好的工作,我想去jm科技做数仓开发,因为这家公司有大数据,然后工资在15K以上,先一点一点的学习,加油肯定可以的)