我是靠谱客的博主 风趣帆布鞋,这篇文章主要介绍shell编程之基础语法循环(while、for、until)、判断(if、case)、函数、数组一、判断二、循环三、函数四、数组,现在分享给大家,希望可以做个参考。
文章目录
- 一、判断
- 1、if
- a、语法格式
- b、例题
- 2、case
- a、语法
- b、例题
- 二、循环
- 1、while
- a、语法格式
- b、例题
- 2、for循环
- a、语法
- b、例题
- 3、until
- a、语法
- 4、脚本运行语法
- 5、循环控制
- a、continue
- b、break
- 三、函数
- 1、函数的几种定义方法
- 2、函数返回值
- 四、数组
- 1、数组的定义
- 2、数组操作
一、判断
1、if
a、语法格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
141、 if [ ] then xxxxxx else xxxxxxx fi 2、 if [ ];then xxxxx else xxxxxx fi
b、例题
1、猜一猜csdn的时间
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25[root@shell shell.test] cat guess.sh while true do time=18 read -p "please enter any num" num if [ $num -gt $time ] then echo "大了" elif [ $num -lt $time ] then echo "小了" else echo "恭喜你,猜对了" exit fi done [root@shell shell.test] sh guess.sh please enter any num10 小了 please enter any num19 大了 please enter any num18 恭喜你,猜对了
2、case
a、语法
复制代码
1
2
3
4
5
6
7
8
9
10
11case 值1 in 1) xxxx ;; 2) xxxx ;; *) xxxx esac
b、例题
1、rsync进程的启动与停止
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36[root@shell shell.test] cat rsync.sh cat << EOF =========menu======= 1、启动进程 2、杀死进程 3、重启进程 =========end======== EOF case $1 in 1) rsync --daemon echo "start" ;; 2) pkill rsync echo "stop" ;; 3) pkill rsync sleep 2 rstnc --daemon ;; *) echo "please enter 1,2,3" esac [root@shell shell.test] sh rsync.sh 1 =========menu======= 1、启动进程 2、杀死进程 3、重启进程 =========end======== start [root@shell shell.test] ps -ef |grep rsync root 2372 1 0 10:40 ? 00:00:00 rsync --daemon root 2374 1673 0 10:40 pts/0 00:00:00 grep --color=auto rsync
二、循环
常见的循环while,for,until
1、while
a、语法格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23while true/flase do xxxxxxxxx done 如果要遍历文件里的行 1、 exec < file while read var do xxxx done 2、 cat < file while read var do xxxxxxxx done 3、 while read var do xxxxxx done < file
b、例题
遍历文件每一行
默认换行时分隔符
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@shell shell.test]# sh while_file.sh root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ^C [root@shell shell.test]# cat while_file.sh #!/bin/bash # 1、cat < ./passwd # 2、exec < ./passwd while read line do sleep 2 echo $line done <./passwd
2、for循环
a、语法
复制代码
1
2
3
4
5
6
7
8
91、for i in {1..10} #可以跟数字 2、for i in `eval echo {$a..$b}`#可以跟变量,但要用eval来二次扫描解析 3、for i in `seq x y`#可以生成数从x到y 4、for i in `cat file`# 可以遍历文件行 5、for (( i=1;i<5;i++ ))#c语言格式也可以 do xxxx done
b、例题
1、以.为分隔符来遍历:在for循环中是以空格为分割符,所以在脚本中要将变量IFS改成以.分割,但最后得改回来。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[root@shell shell.test] cat for_file.sh #!/bin/bash OLD_IFS=$IFS IFS=$"." a="www.baidu.com" for i in $a do sleep 1 echo $i done IFS=$OLD_IFS [root@shell shell.test] sh for_file.sh www baidu com
2、99乘法表
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20[root@shell shell.test] cat 9*9.sh for i in {1..9} do for j in `eval echo {1..$i}` do echo -ne "$j*$i=$(($i*$j)) t" done echo " " done [root@shell shell.test] sh 9*9.sh 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3、until
条件成立循环结束
a、语法
复制代码
1
2
3
4
5until 条件 do xxxxxxxx done
4、脚本运行语法
5、循环控制
a、continue
跳出本次循环
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25[root@shell shell.test]# cat continue for i in {1..9} do for j in `eval echo {1..$i}` do if [ $i -eq 3 ]#当i=3时跳出本次循环 then continue fi echo -ne "$j*$i=$(($i*$j)) t" done echo " " done [root@shell shell.test]# sh continue 1*1=1 1*2=2 2*2=4 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
continue n:退到第n次循环继续
b、break
break n跳出几次循环
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@shell shell.test] cat break.sh for i in {1..9} do for j in `eval echo {1..$i}` do if [ $i -eq 3 ] then break 2 #跳出两次循环,就全部跳出来了 fi echo -ne "$j*$i=$(($i*$j)) t" done echo " " done [root@shell shell.test] sh break.sh 1*1=1 1*2=2 2*2=4
三、函数
函数在脚本中可以将功能模块化,代码重用,减少代码量。
1、函数的几种定义方法
- 定义
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
131、 testfunction01 (){ echo “123” } 2、 function testfunc02 (){ echo “456” } 3、 function testfunc03 { echo “789” }
- 调用
复制代码
1
2functionn testfunc01 张三(参数)
例如
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@shell shell.test] cat fun。sh test (){ echo $1 } function test02 (){ echo $1 } function test03 { echo $1 } test name test02 is test03 lay [root@shell shell.test]# sh fun.sh name is lay
2、函数返回值
函数的返回值可以用return来定义,用echo $?来看返回值是多少
四、数组
1、数组的定义
复制代码
1
2
3
4
5
6
71、name=(a b c d) echo ${name[1]}====>b echo ${name[@]}====>abcd 2、ip=("$a")#添加变量 3、arry=(`ls`)#添加命令 3、ip=(1 2 3 [10]=11)#可以空过数来给后面直接赋值
2、数组操作
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
201、获取元素个数,长度 echo ${#name[@]};echo ${#name[*]} 2、打印数组个数 echo ${name[@]};echo ${name[*]} 3、获取元素长度 echo ${#name[x]}#第x+1个元素的长度 4、遍历数组 array=(`ls`) for i in ${name[@]} do echo $i done 5、查看定义的所有的数组 `declare -a` 6、`declare -a name([x]=ssss)`更改数组的值,但是这样的话会将其他的值全部删掉,所以要将前面的都加上才能改 7、查看索引 echo ${!name[@]}#索引是从0开始的 8、切片 echo ${name[@]:x:y}#从第x个位置取y个数字
最后
以上就是风趣帆布鞋最近收集整理的关于shell编程之基础语法循环(while、for、until)、判断(if、case)、函数、数组一、判断二、循环三、函数四、数组的全部内容,更多相关shell编程之基础语法循环(while、for、until)、判断(if、case)、函数、数组一、判断二、循环三、函数四、数组内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复