Linux shell编程之shell入门 构建脚本
日期: 2018-09-20 分类: 个人收藏 394次阅读
目录
构建基本脚本
前言
>>>脚本中每一行字符数量不超过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 | 标准错误输出 | 2>表示将标准错误输出覆盖式重定向 2>>表示将标准错误输出追加式的重定向 |
>>>使用/dev/null文件废弃输出
当运行生成想要忽略的输出的程序或命令时,可以将输出重定向到该文件
bash test.sh >/dev/null 2>/dev/null
>>>通过管道符和过滤器重定向输出:sort、uniq、join、head、tail
>>>把标准输出和错误输出重定向到指定文件 bash test.sh>test.txt 2>&1
>>>内联输入 Command<< EOF 当遇到分界符EOF中断输入
重定向实战:
>>>将1.txt,2.txt,3.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>>表示将错误追加重定向 |
11.中括号 | [ ] | 表示字符字符中的任意一种,例[1-9]、[a-z] [1-3]表示字符1,2,3任意一个都有可能 |
12.特殊符号 | &&、|| | cmd1&&cmd2 :只有在cmd1执行成功后,才会执行cmd2 cmd1||cmd2 :cmd1执行成功后,cmd2不会再执行 |
说明:
>>>以上内容是本人学习的总结
>>>如还有错误,请留言,指正
>>>亦可分享自己的想法,互相学习
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: rm -rf /*
精华推荐