Linux shell编程之shell入门 构建脚本

目录

构建基本脚本

①显示消息

②使用变量

③重定向输入和输出

④管道

⑤退出脚本

状态码——获取命令执行结果

exit命令

⑥特殊符号总结

 


 

前言

>>>脚本中每一行字符数量不超过255

>>>脚本中使用#这个字符进行注释

>>>脚本中的第一行内容 #例外,该行内容会被识别执行

>>>脚本中的第一行的作用是使用系统的哪个shell类型去执行该脚本,如指定/bin/bash去执行该脚本

例如:

#!/bin/bash                    ——>这一行指定脚本使用shell类型为/bin/bash
#输出hello,wold!            ——>这一行是注释部分,不会被执行
echo "hello,world!"     ——>这一行是命令部分,会被执行

 

①显示消息


>>>使用echo命令:将命令后面的内容输出到终端

echo "hello,world!"        #输出hello,world!

>>>如果echo的内容是需要使用单引号或双引号的字符串,可以用另外一种引号来划定字符串

echo "Let's go together"
echo 'Tom says "So easy".'

>>>如果想把文本字符串和命令输出显示在同一行,可以使用echo语句的 -n 参数

echo -n "The User 's UID is : "
echo $UID
输出:The User 's UID is : 0

 


 

②使用变量

>>>变量允许你临时地将信息存储在shell脚本中,方便与脚本中其他命令一起使用

>>>在脚本中,引用一个变量需要在它之前加上美元符($),而引用变量来对其进行赋值时不要使用美元符

例:val1=1              #定义变量val1

       val2=$val1       #引用val1需要$,赋值给变量val2,val2不需要$

变量分为两种类型:环境变量和局部变量

环境变量

环境变量不仅在shell会话有效,对所有的shell创建的子进程都有效

局部变量

局部变量只能在创建它的shell中有效,当这个shell退出或终止后,局部变量会失效;

用户在脚本中定义和使用自己的变量,在脚本的整个生命周期里,变量会一直保持着它们的值但在shell脚本结束时会被删除掉

变量使用之单引号和双引号问题

>>>变量被单引号和双引号引起来,有时候输出的结果是不一样的

使用单引号,不能识别变量,单引号内的特殊字符被当做普通字符使用

 echo '$HOME'      #输出$HOME

使用双引号,才能识别变量

echo "$HOME"    #输出/home/user

如果需要在双引号内使用特殊字符,需要使用转义符\转义

echo "\$HOME"                        #输出$HOME 将特殊符号转义为普通符号

 

变量使用之命令替换(反引号 `

>>>将命令输出结果传递给某个变量,这样就可以随意在脚本中使用

[bei@localhost test]$ a=`whoami`
[bei@localhost test]$ echo $a
bei
将 whoami 命令的执行结果赋予a变量

                                                       


 

③重定向输入和输出

>>>通过特定的I/O的命令和符号(>>><)来操作与系统之间数据的I/O

>>>输出重定向,可以将命令的输出重定向到系统某个位置(比如文件)

>>>输入重定向,可以将文件重定向到命令输入

项目

描述

符号解释

文件描述符 0

标准输入

<

文件描述符 1

标准输出

>表示覆盖式的重定向,重定向之前会先删除文件中原来的内容                      
>>表示追加式的重定向,直接将内容追加到文件的尾部
 

文件描述符 2

标准错误输出
bash test.sh 2> test.txt
即使执行脚本有错误也不显示出来
而是重定向于
test.txt

2>表示将标准错误输出覆盖式重定向

2>>表示将标准错误输出追加式的重定向

 

>>>使用/dev/null文件废弃输出

当运行生成想要忽略的输出的程序或命令时,可以将输出重定向到该文件

bash test.sh >/dev/null 2>/dev/null

>>>通过管道符和过滤器重定向输出:sortuniqjoinheadtail

>>>把标准输出和错误输出重定向到指定文件 bash test.sh>test.txt 2>&1

>>>内联输入 Command<< EOF  当遇到分界符EOF中断输入

重定向实战:

>>>1.txt2.txt3.txt三个文件的内容写入4.txt

cat 1.txt 2.txt 3.txt > 4.txt

>>>将脚本的标准输出和标准错误输出都丢弃

bash test.sh >/dev/null 2>&1

 


 

④管道

>>>将一个命令的输出作为另一个命令的输入 (echo命令的-e选项:启用反斜杠转义的解释)

[bei@localhost test]$ echo -e "2\n3\n1"              
2
3
1
[bei@localhost test]$ echo -e "2\n3\n1"| sort
1
2
3

>>>管道串起来的两个命令是同时运行的,在第一个命令产生的输出的同时,输出会被立即送到第二个命令,
数据传输不会用到任何中间文件或缓冲区

 


 

⑤退出脚本

状态码——获取命令执行结果

>>>shelll中运行的每个命令都使用退出状态码,来告诉shell刚运行的命令已经运行完毕

>>>退出状态吗是介于0-255的一个整数

>>>查看退出状态码:$?,它用来保存上个已执行的退出状态码

状态码

描述

0

命令成功退出

1

一般性未知错误,例如:给某个命令提供了无效参数

2

不适合的shell命令

126

命令不可执行,Permission denied

127

没找到命令

128

无效的退出参数

128+x

与Linux信号x相关的严重错误

130

命令通过 ctrl+c  结束

255

正常范围之外的退出状态码

exit命令

>>>默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出

[bei@localhost test]$ cat exit.sh
#!/bin/bash
echo "hello,world!"
[bei@localhost test]$ bash exit.sh
hello,world!
[bei@localhost test]$ echo $?
0

>>>可以使用exit命令返回自己的退出状态码

[bei@localhost test]$ cat exit.sh 
#!/bin/bash
echo "hello,world!"
exit 100
[bei@localhost test]$ bash exit.sh
hello,world!
[bei@localhost test]$ echo $?
100

>>>退出状态码最大只能是255,当exit命令跟一个大于255的数,退出状态码的结果是该值除以256得到的余数

[bei@localhost test]$ cat exit.sh
#!/bin/bash
echo "hello,world!"
exit 260
[bei@localhost test]$ bash exit.sh
hello,world!
[bei@localhost test]$ echo $?
4

 


 

⑥特殊符号总结

1.星号字符

*

代表零个或多个任意字符

2.问号符号

代表零个或一个任意字符

3.注释字符

#

注释说明(与第一行#!做区别)

4.转义字符

\

将特殊字符转义为普通字符

5.管道符

|

将前面的命令输出作为后面命令的输入

6.特殊符号

$

符号$用作变量前面的标识符,可以和!结合起来使用
!$表示上一条命令的最后一个变量

7.特殊符号

可以在一行中输入多个命令

8.特殊符号

~

~ :当前登录用户的家目录

9.特殊符号

&

表示将命令放入到后台中去运行

10.重定向符号

>、>>、

2>、2>>

>表示取代                            
>>表示追加
2>表示将标准错误输出重定向

2>>表示将错误追加重定向

11.中括号

[ ]

表示字符字符中的任意一种,例[1-9]、[a-z]

[1-3]表示字符1,2,3任意一个都有可能

12.特殊符号

&&、||

cmd1&&cmd2 :只有在cmd1执行成功后,才会执行cmd2

cmd1||cmd2 :cmd1执行成功后,cmd2不会再执行
                  只有cmd1执行不成功后,cmd2才会执行
 


说明:

>>>以上内容是本人学习的总结

>>>如还有错误,请留言,指正

>>>亦可分享自己的想法,互相学习

猜你喜欢

转载自blog.csdn.net/Mr_Bei/article/details/82782372