脚本的基本编译
从本节开始,正式进入shell脚本编辑。 1、使用多条命令如果想使用两条命令同时运行,可以使用 分号 隔开来执行; 例如:date ; who 注意,这种方式下面,单条命令的最大字符数量不能超过255个字符; 2、创建脚本文件#!/bin/bash #在普通的shell脚本中,# 符号作为注释行,默认shell脚本不处理注释行,但是第一行例外。这一行用来告诉系统,以下均为shell程序命令; #!/bin/bash #This script displays the date and who‘s logged on date who 在shell脚本中,程序执行都是按照顺序由上至下的进行运行的; 如果想执行这个脚本程序,可以将文件添加到PATH路径中,或是使用全路径来执行这个脚本程序; 第二种执行方式: chmod u+x test1 ./test1 3、显示消息大多数的shell命令生成自己的输出,这些输出在运行该脚本的控制台监视器上输出相应的信息,来帮助客户知道发生了什么事情; #!/bin/bash #This script displays the date and who‘s logged on echo The time adn date are; date echo "Let‘s see who‘s logged into the system:" who chmod u+x test1 ./test1 echo命令再输出内容的时候默认在最后输出一个回车,此时,为了让结果和文本字符串在同一行显示,我们使用 -n 参数来实现 echo -n "The time and date are:" 输出结果如下: 4、使用变量在shell脚本中,我们不是仅仅只处理命令,还需要加入变量,结合数据来实现对应的功能; 4.1、环境变量首先,在shell脚本中就可以应用对应环境变量,通过set命令就可以查看到; #!/bin/bash #display user information from the system echo “User info for userid:$USER” echo UID: $UID echo HOME: $HOME chmod u+x test2 ./test2 这样的话,就会显示当前用户的UID和HOME目录; 在shell脚本程序中,如果你需要使用符号本身的含义,是需要使用? ? 反斜线来还原符号本身的含义的 echo "The cost of th item is $15" 4.2、用户变量除了系统自带的环境变量,在shell脚本程序中,Linux系统是支持使用自己的定义的本地变量的;也就是用户变量; 但是要注意,用户变脸的字符不能操作20个字符字母、数字或者下划线。变量名称是区分大小写的Var1和var1是不一样的。并且通过等号,来给变量赋值; var1=10 var2=-57 var3=testing var="still more testing" 用户变量再shell脚本周期内生效,如果shell脚本执行结束,这个变量也随之被删除; #!/bin/bash #testing variables days=10 guest="Katie" echo "$guset checked in $days days ago" days=5 guset="Jessica" echo "$guset checked in $days days ago" chmod u+x test3 ./test3 脚本由上向下执行,变量重新复制都会覆盖掉之前所有的值; #!/bin/bash #assigning a variable value to another variable value1=10 value2=$value1 echo The resulting value is $value2 chmod u+x test4 ./test4 其中$value1值赋给value2的时候必须加上 $ 符号 4.3、反引号反引号所引起来的内容,如果是命令,则会将命令的执行结果取出来,并赋值给对应的变量; #!/bin/bash #using the backtick character testing=`date`echo "The date and time are:" $testing chmod u+x test5 ./test5 此时,输出的就是date这个内容,就是执行date命令所看到的内容 #!/bin/bash # copy th /usr/bin directory listing to a log file today=`date +%y%m%d` ls /usr/bin -al > log.$today chmod u+x test6 ./test6 这样就将ls /usr/bin -al 查看到的内容,复制给对应的目录,且这个目录后缀为今天的时间,这个操作在真实的工作环境下是经常使用的; 5、重定向输入输出有时候,我们想保存命令的输出,而不是显示出来。bash shell提供了几种操作符来实现; 5.1、输出重定向command > outputfile date > test6 ls -l test6 who > test6 cat test6 如果是追加文件的话,我们就需要使用 >> date >> test6 cat test6 5.2、输入重定向command < inputfile 它主要是将一个文件的内容重定向到一条命令中去; wc < test6 #将test6这个文件交给wc来执行
wc命令:在wc命令下生成的三个值 文本的行数 文本的单词书 文本的字节数 内置输入重定向符号为两个小于号 <<;我们需要指定一个文本标记来说明数据输入的开始和结尾。文本标记可以使用任意字符,但是开始和结尾必须相同 wc << EOF >test string 1 >test string 2 >test string 3 > EOF 6、管道command1 | command2 #将command1命令的结果输出给command2来执行; rpm -qa | sort | more 7、数学计算? 在shell脚本程序中,使用数学运算是必须的; 7.1、expr 命令可以通过expr来进行数学运算 expr 1+5 expr命令能够区分一些不同的数学操作符合字符串的操作符,如下表: expr 5 * 2 #对于有些符号,具有特定意义的,需要使用反斜线,恢复其本身意思; #!/bin/bash # An example of using the expr command var1=10 var2=20 var3=‘expr $var2 / $var1‘ echo The result is $var3 chmod u+x test6 ./test6 7.2、使用括号($[operation]) var1=$[1 + 5] 与使用expr命令相比,使用括号使用shell数学运算变的更加简单。 #!/bin/bash var1=100 var2=50 var3=45 var4=$[$var1 * ($var2 - $var3)] echo The final result is $var4 chmod u+x test7 ./test7 使用括号的方式来进行算数运算,无需当心符号错误; #!/bin/bash var1=100 var2=45 var3=$[$var1 / $var2] echo The final result is $var3 chmod u+x test8 ./test8 上面运行脚本的结果为2,是一个整形,这里属于数据类型的结果,正确情况下需要回复一个浮点数据才是正确的; 7.3、浮点解决方案解决浮点运算问题最简单的方式就是使用bc计算器; 1、bc的基础知识 bash计算器可以识别的数据类型:1、数字(包括整数和浮点);2、变量(简单变量和数组);3、注释(以英镑符号开始的行或者C育婴的/* */对);4、表达式;5、编程语句(如if-then语句);6、函数; bc 12 * t.4 3.156 * (3 + 5) quit scale参数控制浮点计算后支持几位数值: bc -q 3.44 / 5 scale=4 3.44 / 5 或者则会像是小数点后4为,这就是通过scale参数来控制的; 同时,在bc计算器中,也可以使用变量来进行匀速昂; bc -q var1=10 var1 * 4 var2 = var1 / 5 print var2 quit 2、在脚本中使用bc 在shell脚本中使用bc计算器,来进行浮点计算; 用法:variable=`echo "options; expression" | bc` #!/bin/bash var1=`echo " scale=4; 3.44 / 5" | bc` echo The answer is $var1 chmod u+x test9 ./test9 为了不再受到数字的限制,我们使用变量来实现运算 #!/bin/bash var1=100 var2=45 var3=`echo "scale=4; $var1 / $var2" | bc` echo The answer for this is $var3 chmod u+x test10 ./test10 当然,如果继续赋值了的话,可以再给其他的运行式进行运算 #!/bin/bash var1=20 var2=3.14159 var3=`echo "scale=4; $var1 * $var2" | bc` var4=`echo "scale=4; $var3 * $var2" | bc` echo The final result is $var4 对于简短的计算这种方法很好,但是有时数字多了,就会显示的很混乱; 这个问题有个简单的解决方法。bc命令能够是被输入重定向,容许把文件重定向到bc命令中进行处理。然而,这同样容易混淆,因为需要在文件中存储表达式; 还可以使用内置输入重定向的方式,而不是用文件重定向。在shell中,可以把输出赋值给变量。如下: variable=`bc << EOF
options
statements
expressions
EOF
`
EOF (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |