我是靠谱客的博主 风趣帆布鞋,这篇文章主要介绍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
14
1、 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
11
case 值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
23
while 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
9
1、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
5
until 条件 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
13
1、 testfunction01 (){ echo “123” } 2、 function testfunc02 (){ echo “456” } 3、 function testfunc03 { echo “789” }
  • 调用
复制代码
1
2
functionn 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
7
1、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
20
1、获取元素个数,长度 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)、函数、数组一、判断二、循环三、函数四、数组内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部