我是靠谱客的博主 畅快枫叶,这篇文章主要介绍Linux shell编程学习Linux shell编程学习,现在分享给大家,希望可以做个参考。

Linux shell编程学习

shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。这点与Windows的命令提示符类似,但Linux shell的功能更加强大,我们可以使用 <和>对输入输出进行重定向使用|在同时执行的程序之间实现数据的管道传递使用$(n)获取子进程的参数

重定向:
以b.txt为例: ll > b.txt
在这里插入图片描述
ll显示的东西 在b.txt显示了

管道传递: ll |grep “s”
在这里插入图片描述
在ll中 查找带s的文件

Linux脚本编写基础

执行shell脚本的方法:1.sh 文件名,2.bash 文件名 ,3. source 文件名

1.脚本开头

程序的开头必须为 #!/bin/sh(放在文件的第一行)
shell编程是以“#” 为注释,但对 #!/bin/sh 却不是, #!/bin/sh是对shell的声明,说明你所用的是那种类型的shell及其路径

2.注释

在进行shell编程的时候,以#开头的句子表示注释,直到这一行结束,C语言中是以// /**/表示注释

3. 简单shell书写

复制代码
1
2
3
4
5
#!/bin/sh A="hello world" echo "A is" echo $A

在这里插入图片描述
注意:shell在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第一个符号标记就是“A”,当然就不成立了,
而没有空格的时候,第一个标记是“A=“hello world””,shell将解释为变量赋值指令,因此可以通过。

4.环境变量

在这里插入图片描述

5.系统变量

在这里插入图片描述
代码演示d.sh:

复制代码
1
2
3
4
5
6
7
8
#!/bin/sh echo $0 echo $# echo $1 echo $2 echo $3

运行结果:
在这里插入图片描述

6. shell使用一些Linux的指令

在这里插入图片描述
以cp拷贝为例:

复制代码
1
2
3
#!/bin/sh cp a.sh t.sh

结果:
在这里插入图片描述
在shell中实现键盘输入:用read

复制代码
1
2
3
4
5
6
7
#!/bin/sh A=10 echo $A read A echo $A

运行结果:
在这里插入图片描述

7.shell的语法及控制结构

7.1条件(if else elif)

检查文件是否存在,test用法,
代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
#!/bin/sh #if test -f b.txt if [ -f b.txt ] then echo "success" else echo "failed" fi

在这里插入图片描述
注意:使用[]时,必须要在[符号和被检查的条件之间留出空格,可以把符号看作和test样,test和后面的条件之间总是有一个空格。

代码最后不要忘了写fi来结束这个判断
在这里插入图片描述
字符串测试:
在这里插入图片描述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh echo "this is morning,yes or no" read today if [ $today = "yes" ] then echo "good morning" #else elif [ $today = "no" ] echo "good afternoon" fi

在这里插入图片描述
整数测试:
在这里插入图片描述
测试是否相等为例:

复制代码
1
2
3
4
5
6
7
8
9
#!/bin/sh if [ 3 -eq 4 ] then echo "yes" else echo "no" fi

在这里插入图片描述
文件测试:
在这里插入图片描述
测试文件是否为一个目录:

复制代码
1
2
3
4
5
6
7
8
9
#!/bin/sh if [ -d b.txt ] then echo "yes" else echo "no" fi

在这里插入图片描述

7.2 for语句


代码演示:

复制代码
1
2
3
4
5
6
7
#!/bin/sh for food in 1 5 7 9 do echo $food #输出结果 done

结果:
在这里插入图片描述
在默认情况下. shell的变量都是当作字符串来处理的,所以for在适合于对一系列字符串进行循环处理时使用,但需要执行特定次数时,for就不怎么适用了。

7.3 while语句

代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh echo "please password" read passwd #输入数字 while [ "$passwd" != "6" ] #判断条件是否满足 do echo "try again" read passwd done exit 0

结果:
在这里插入图片描述
while语句与整数结合用:

复制代码
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh food=1 while [ $food -le 20 ] do echo $food food=$(($food+1)) #注意要用两个括号 不然food=$food+1 编译不通过 done exit 0

在这里插入图片描述

7.4 until语句

在这里插入图片描述
代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
#!/bin/sh food=1 until [ $food -le 20 ] do echo $food food=$(($food+1)) #注意要用两个括号 不然food=$food+1 编译不通过 done exit 0

结果:啥都没有
在这里插入图片描述
until与while循环很相似,只不过while循环是条件满足时,循环继续,而until是条件满足时跳出循环

7.5 case语句

在这里插入图片描述
代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh echo "this is morning,please yes or no" read today #键盘输入 case "$today" in #判断 yes) echo "good morning";; no) echo "good afternoon";; y ) echo "good morning";; n ) echo "good afternoon";; * ) echo "answer not recognzed";; esac #这个必须加 exit 0

在这里插入图片描述
注意每个模式都以双分号(;;)结尾,因为你可以在前后模式之间放置多条语句,所以需要使用一一个双分号来标记前一个语句的结束和后一个语句的开始

7.6 函数

在这里插入图片描述
代码演示:

复制代码
1
2
3
4
5
6
7
8
9
#!/bin/sh food() { echo "ni zhen de henshuai" } echo "ni zhen sha" food echo "ni shi shazi"

在这里插入图片描述

如果要在shell函数中声明局部变量,则要使用local关键字,局部变量的作用域则局限在函数范围内。此外,函数还可访问全局作用范围内的其他shell变量。如果全局变量和局部变量出现了同名,则局部变量会覆盖全

使用局部变量的时候:
代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh sample_name="ni hao shuai" food() { local sample_name="local ni hao shuai" echo "ni zhen de henshuai" echo $sample_name } echo "ni zhen sha" food echo $sample_name echo "ni shi shazi" exit 0

运行结果:
在这里插入图片描述

在这里插入图片描述
下列代码演示函数是如何传递参数,及如何返回一个值的:

复制代码
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
#!/bin/sh yes_or_no() { echo "is your name $*?" while true do echo "please enter yes or no" read a case "$a" in y|yes) return 0;; n|no) return 1;; * ) echo "error" esac done } echo "original parameters are $*" if yes_or_no "$1 " # shell脚本编程中,注意:Linux中返回0表示成功 then echo "hi$1" else echo "never mind" fi exit 0

在这里插入图片描述

7.7 (:)命令

冒号(:)是一个空命令,它偶尔会被用于逻辑简化,相当于true的一个别名,由于它是内置命令,所以它的运行效率要比true高
while:相当于while true

代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh fun() { while : do echo "jingjing" done } fun exit 0

结果:无限循环下去 Ctrl+c终止程序了
在这里插入图片描述

7.8 break 命令

这个命令在控制条件未满足之前,跳出for/while/unti循环。另外还可以为break提供一个参数,表明要跳出的循环的层数,这点跟我们在c语言中的break不一样。不过一般情况下,我们不会这么做,因为它降低了程序的可读性。

代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh rm -rf fred* echo > fred1 #创建3个文件 和一个目录 echo > fred2 mkdir fred3 echo > fred4 for file in fred* do if [ -d "$file" ] #如果是目录,就退出 then break; # ;可有可无 fi done echo first direcyory starting fred was $file rm -rf fred*

在这里插入图片描述

7.9 continue 命令

类似于C中的continue,使for/while/until循 环跳到下一次循环继续执行,continue也可以附带一个参数,表示希望继续执行的循环嵌套if的层数,同样,这个参数也很少用,它会降低th程序的可诗性

代码演示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh rm -rf fred* echo > fred1 echo > fred2 mkdir fred3 echo > fred4 for file in fred* do if [ -d "$file" ] then echo skipping the directory $file continue fi done echo first direcyory starting fred was $file rm -rf fred*

在这里插入图片描述

7.10 exec 命令

将当前的shell替换为一一个不同的程序
exec wall"hello world"
将当前的shell替换为执行wall,exec后面的语句都不会执行了,因为当前的shell已经不复存在了

代码演示 :

复制代码
1
2
3
4
5
6
7
#!/bin/sh echo "lulu" exec echo "hengheng" echo "aa" echo "bb"

在这里插入图片描述

最后

以上就是畅快枫叶最近收集整理的关于Linux shell编程学习Linux shell编程学习的全部内容,更多相关Linux内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部