linux 的 shell2--caes for while 数组

case:
如果变量的值满足的是 值1,执行命令1;如果不满足,继续向下匹配值2,执行命令2,… …

#!/bin/bash

read -p "请输入成绩:" s

if [ $s -gt 100 -o $s -lt 0 ]
then
        echo "成绩不和规定。"
else

case  $s in
        9[0-9]|100)
        echo "A"
        ;;
        8[0-9])
        echo "B"
        ;;
        7[0-9])
        echo "C"
        ;;
        6[0-9])
        echo "D"
        ;;
        [0-9]|[0-5][0-9])
        echo "E"
        ;;
esac
fi


[root@www shell]# ./chengji.sh 
请输入成绩:44
E
[root@www shell]# ./chengji.sh 
请输入成绩:79
C
[root@www shell]# ./chengji.sh 
请输入成绩:80
B
[root@www shell]# ./chengji.sh 
请输入成绩:11111
成绩不和规定。

for循环:

for 变量 in [ 取值列表 ]
do
done

以此比较$@ 和 $*
可以看出 $@ 是分开计算的,每一个都是独立的参数。
而 $ *则是整体计算的,算1个参数。

[root@www shell]# ./for.sh 1 2 3 4 5
1
2
3
4
5
共输入了 5 个参数。
1 2 3 4 5
共输入了 1 个参数。
[root@www shell]# cat for.sh 
#!/bin/bash

i=1

for i in "$@"
do
	echo $i 
	let i=i++
done
echo "共输入了 $i 个参数。"
i=1
for j in "$*"
do
	echo $j
	let i=i++
done
echo "共输入了 $i 个参数。"
[root@www shell]# cat for3.sh 
#!/bin/bash
#打印100以内的偶数
for i in `seq 100`
do
	if [ $[i%2] -eq 0 ]   //求余运算
	then 
		echo $i
	fi
done

for循环最经典的案例:!!!
打印99乘法表:

[root@www shell]# ./9\*9.sh 
1*1=1 	
2*1=2 	2*2=4 	
3*1=3 	3*2=6 	3*3=9 	
4*1=4 	4*2=8 	4*3=12 	4*4=16 	
5*1=5 	5*2=10 	5*3=15 	5*4=20 	5*5=25 	
6*1=6 	6*2=12 	6*3=18 	6*4=24 	6*5=30 	6*6=36 	
7*1=7 	7*2=14 	7*3=21 	7*4=28 	7*5=35 	7*6=42 	7*7=49 	
8*1=8 	8*2=16 	8*3=24 	8*4=32 	8*5=40 	8*6=48 	8*7=56 	8*8=64 	
9*1=9 	9*2=18 	9*3=27 	9*4=36 	9*5=45 	9*6=54 	9*7=63 	9*8=72 	9*9=81 	
[root@www shell]# cat 9\*9.sh 
#!/bin/bash

for i in `seq 9`
do
	for j in `seq $i`
	do
		echo -e -n "$i*$j=$[$i*$j] \t" 
	done
	echo	 
done

变量的常见写法

1、“1 2 3 4 5 6 7…”

2、seq等等。

3、“$@” “ $#”

4、使用变量

#!/bin/bash
WORD="a b c d f g h"
for i in $WORD
do
     echo $i
done

[root@www shell]# ./for2.sh 
a
b
c
d
f
g
h

使用for循环可以嵌套,在数据结果与算法中,是以for循环计算一个程序的执行效率的。

while循环:
循环次数不固定的循环。

变量初始值
while 条件表达式或者命令(read)
do
      循环体
      变量的更新 //一定要有变量的更新,否则死循环
done

当条件成立时执行循环体,条件不满足是跳出循环。

循环中使用输入重定向
while read line
do
done < /script/userlist

表示从这个文件中按行读取。读取到变量line中。

until 与while是相反的

变量的初始值
until 条件表达式或者命令
do
      循环体
      变量的更新
done
说明:当条件为真,退出循环
           until与while是相反的

简单的实现并发

#!/bin/bash

> /tmp/ip.txt
for i in `seq 0 254`
do
    (ping 172.16.$i.254 -c2 &> /dev/null
    if [ $? -eq 0 ]
    then
       echo 172.16.$i.254 >> /tmp/ip.txt
    fi) &                //()中的内容是在子shell中运行的
done

建立很多个子shell。

数组
数组就是一组相同的元素的集合,数组中存放的不一定是数字。

shell中的数组就更为粗糙,甚至不要求存相同类型的元素,shell中的数组分为两类:
1、普通数组 :正常的数组
2、关联数组 :下标为字符串的数组

想要获取某个数组中的值,就要通过数组的下标,这里叫索引,来寻找

定义数组:

数组名[下标]=变量值
数组名=(变量值,变量值,变量值…)

查看数组信息:

[root@www shell]# declare -a
declare -a array1='([0]="name" [1]="pear" [2]="apple")'
declare -a array2='([0]="tom" [1]="jack" [2]="alice")'

访问数组:

[root@www shell]# echo ${array1[2]}  //下标为2 的元素
apple
[root@www shell]# echo ${array1[@]}   //全部
name pear apple
[root@www shell]# echo ${#array1[@]}   //元素个数
3
[root@www shell]# echo ${!array1[@]}    //获取下标
0 1 2
[root@www shell]# echo ${array1[@]:1}   // 从下标为1 的开始打印输出
pear apple
[root@www shell]# 

遍历方法:通过索引,或者元素数量。

定义关联数组

declare -A arr
数组名 [下标名] = 变量名

arr2=([index1]=tom [index2]=jack [index3]=alice [index4]=‘bash shell’)

遍历方法:通过索引遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值