当前位置: 首页 > Linux

Linux_《Linux命令行与shell脚本编程大全》第11章学习总结

时间:2023-04-06 04:34:34 Linux

时间:2017-08-28周一注:本文部分内容摘自《Linux命令行与shell脚本编程大全》一书,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第11章学习总结第11章:构建基本脚本本章内容使用多条命令创建脚本文件显示消息使用变量输入输出重定向管道数据操作退出脚本11.1使用多条命令Shell的要点脚本就是输入多条命令并对每条命令的结果进行处理,甚至将一条命令的结果传递给另一条命令。shell允许您将多个命令串在一起并一次执行它们。如果要同时运行两个命令,可以将它们放在同一行,彼此之间用分号分隔。命令行中的最大字符数不超过255个字符。命令演示:日期;who命令说明:先执行date显示当前日期和时间,再执行who显示当前登录系统的用户。这样,每次运行前,都必须在命令提示符下输入完整的命令。这些命令可以组合成一个简单的文本文件,这样就不需要在命令行上手动输入。11.2创建shell脚本文件命令演示:vimtest1命令说明:创建一个名为test1的文件创建shell脚本文件时,必须在文件的第一行指定要使用的shell,格式为#!/bin/bash在通常的shell脚本中,井号(#)用作注释行。shell不处理shell脚本中的注释行。但是shell脚本文件的第一行是个例外。#后的感叹号将告诉shell使用哪个shell来运行脚本。使用vim编辑test1并保存#!/bin/bash#myshellscriptdatewho命令演示:echo$PATH命令说明:查看PATH环境变量命令演示:chmodu+xtest1命令说明:指定文件属主执行通过chmod命令文件权限命令demo:./test1命令描述:运行当前目录下的test1脚本11.3显示消息命令格式:echo"msg"命令描述:显示echo后的文本字符串msg命令格式:echo-n"msg"命令说明:显示回显后的文本字符串,不换行。修改test1如下,保存运行看看效果#!/bin/bash#myshellscriptecho-nThetimeanddateare:dateecho"Let'sseewho'sloggedinitthesystem:"who11.4使用变量11.4.1环境变量命令演示:set命令说明:显示当前环境变量列表命令演示:$UID命令说明:通过美元符号使用环境变量($)使用vim编写test2如下,运行#!/bin/bash#displayuserinfomationfromthesystem.echo"Userinfoforuserid:$USER"echoUID:$UIDechoHOME:$HOME说明:变量也可以用${variable}的形式引用。变量名周围的额外花括号通常用于帮助识别美元符号后的变量名。如果要显示$符号,需要使用它进行转义,如:\$11.4.2用户变量用户变量变量允许临时存储数据,可以在整个脚本中使用。由字母、数字或下划线组成,长度不超过20特别注意变量名称区分大小写。使用等号赋值,等号两边不能有空格。例如:var1=10,var2="stillmoretesting"shell脚本自动识别决定变量值的数据类型并使用美元符号来引用它。使用vim编写test3如下#!/bin/bashdays=10guest="Katie"echo"$guestcheckedin$daysdaysago"days=5guest="Jessica"echo"$guestcheckedin$daysdaysago"一美元引用变量值时需要符号,引用变量赋值时不要使用美元符号,使用vim写test4如下#!/bin/bashvalue1=10value2=$value1echo结果value2为$value2value3=value1echo结果value3是$value311.4.3命令替换shell脚本最有用的功能之一是能够从命令输出中提取信息并将其分配给变量。一旦将输出分配给变量,就可以在脚本中自由使用它。有两种方法可以将命令输出分配给一个可变的反引号(`):testing=`date`$()格式:testing=$(date)使用vim编写test5如下#!/bin/bash#copythe/usr/bin目录列表到日志文件today=$(date+%y%m%d)ls/usr/bin-al>log.$today警告:命令替换创建一个子shell来运行相应的命令。子外壳(subshel??l)是由运行脚本的外壳创建的独立子外壳(childshell)。因此,脚本中创建的变量不能被子shell执行的命令使用。如果在命令提示符下使用./路径运行命令,也会创建一个子shell;如果在运行命令时不添加路径,则不会创建子shell。11.5输入输出重定向11.5.1输出重定向命令格式:command>outputfile命令描述:使用大于号(>)将命令的输出重定向到一个文件命令演示:date>test6命令描述:重定向操作字符创建文件test6,并将date命令的输出重定向到该文件。如果文件已经存在,它将覆盖现有文件。命令演示:date>>test6命令说明:将date命令的输出追加到test6文件中11.5.2输入重定向命令格式:command=ARG2:如果ARG1大于或等于ARG2,则返回1;否则返回0ARG1>ARG2:如果ARG1大于ARG2,则返回1;否则返回0ARG1+ARG2:返回ARG1和ARG2的算术运算和ARG1-ARG2:返回ARG1和ARG2的算术运算的差ARG1*ARG2:返回ARG1和ARG2的算术积ARG1/ARG2:返回算术ARG1和ARG2算术商的运算(注意:只支持整数运算)ARG1%ARG2:返回ARG1和ARG2的算术余数STRING:REGEXP:如果REGEXP匹配STRING中的模式,则返回模式匹配匹配STRINGREGEXP:如果REGEXPmatchesinSTRING模式的一个模式,返回模式匹配substrSTRINGPOSLENGTH:返回起始位置为POS(从1开始计数),长度为LENGTH的子串indexSTRINGCHARS:返回CHARS字符串找到的位置在字符串中;否则,返回0lengthSTRING:返回字符串的数字长度STRING+TOKEN:将TOKEN解释为字符串,即使它是关键字(EXPRESSION):返回修改EXPRESSIONtest6脚本的值#!/bin/bashvar1=10var2=20var3=$(expr$var2/$var1)echo结果为$var3使用时注意转义特殊符号在expr命令中使用脚本相当复杂。11.7.2使用方括号命令格式:$[operation]命令说明:使用美元符号和方括号括起数学表达式。这种方法比使用expr命令更方便,也适用于shell脚本。写test7脚本#!/bin/bashvar1=100var2=50var3=45var4=$[$var1*($var2-$var3)]echo最后结果是$var4写test8脚本#!/bin/bash#只支持整数运算var1=100var2=45var3=$[$var1/$var2]echo最终结果为$var311.7.3浮点数求解1.bc的基本用法bc是bash内置的计算器,用于求解bash中的数学运算整数限制bash计算器识别数字(整数和浮点数)变量(简单变量和数组)注释(C中以#或/**/开头的行)表达式编程语句(例如if-then语句)函数命令格式:bc命令描述:访问bash计算器命令格式:quit命令说明:进入bash计算器后,输入quit退出bash计算器2.在脚本中使用bc命令格式:variable=$(echo"options;expression"|bc)命令说明:使用命令替换来运行bc命令并将输出分配给变量。options可以设置变量,多个变量之间用分号隔开。expression参数定义了bc执行的数据表达式。编写test9脚本#!/bin/bash#使用scale指定小数点后的位数var1=$(echo"scale=4;3.44/5"|bc)echoTheansweris$var1编写test10脚本#!/bin/bashvar1=100var2=45var3=$(echo"scale=4;$var1/$var2"|bc)echo答案是$var3writetest11script#!/bin/bashvar1=20var2=3.14159var3=$(echo"scale=4;$var1*$var2"|bc)var4=$(echo"scale=4;$var3*$var2"|bc)echo最后的结果是$var4内联重定向命令格式:variable=$(bc<、>>、<、<<、|、expr、$[]、bc、exit命令。本章学习命令个人总结如下echo:显示消息$:获取变量值$():命令替换>:输出重定向(覆盖数据)>>:输出重定向(追加数据)<:输入重定向<<:内联输出重定向|:管道命令expr:处理算术运算的数据表达式$[]:算术运算用方括号包围的内容bc:浮点算术运算的bash计算器exit:指定退出状态码