Linux Command Line and....ch11(构建基本脚本)
来源:互联网 发布:名字抽奖软件 编辑:程序博客网 时间:2024/05/16 08:09
本章内容:
- 使用多个命令
- 创建脚本文件
- 显示消息
- 使用变量
- 输入输出重定向
- 管道
- 数学运算
- 退出脚本
11.1 使用多个命令
shell脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另一个命令。如果要两个命令一起运行,可以把它们放在同一行中,彼此用分号隔开。
date ; who
2017年 06月 23日 星期五 09:59:02 CST
*** tty7 2017-06-04 11:34 (:0)
11.2 创建shell脚本文件
在创建shell脚本文件时,必须在文件的第一行指定要使用的shell。其格式为:
#!/bin/bash
在通常的shell脚本中,#可以用来注释行,除了以“#!”开头的第一行
完成脚本test1并保存后(我使用的是gedit),在shell中输入脚本名称,发现提示找不到命令。这是因为PATH中没有test1所在的路径。有两种方法解决问题:
1.将shell脚本文件所在的目录添加到PATH环境中
2.使用绝对路径或相对文件路径来引用shell脚本文件
第二种方法:
绝对路径(指从根目录开始)l@l-virtual-machine:~$ /home/l/script/test1
相对路径(当前目录 .) l@l-virtual-machine:~/script$ ./test1
中途还发生test1脚本的权限问题,因为test1脚本是在root用户下创建的,而我使用自己的账户在执行。所以要用chmod命令改变权限
11.3 显示消息
echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
该命令的一般格式为: echo [ -参数 ] 字符串
参数:-n 不要在最后自动换行
※ echo $PATH 可以显示环境变量
可以将echo语句加到shell脚本中任何需要显示额外信息的地方。
用echo正常输出引号的方法:
$ echo ‘Rich says “scripting is easy”.’
Rich says “scripting is easy”.
11.4 使用变量
变量允许你临时性地将信息存储在shell脚本中。
===
11.4.1 环境变量
可以用 set命令来显示一份完整的当前环境变量列表。
在脚本中,你可以在环境变量名称之前加上美元符号($)来使用这些环境变量。
echo UID: $UID
===
11.4.2 用户变量
用户变量区分大小写,所以变量Var1和变量var1是不同的。
#!/bin/bash
# assigning a variable value to another variable
value1=10
value2=$value1
echo The resulting value is $value2
输出结果是10
若 value2=value1,则输出value1
所以引用一个变量的值来给另一个变量赋值,也需要加上$符号
===
11.4.3 命令替换
从命令输出中提取信息,并将其赋给变量。
两种方式:
- 反引号字符
- $()格式
#!/bin/bash#this script is used for display the date and the userdatetesting=$(who)echo the user is $testing
输出:
2017年 06月 23日 星期五 11:14:43 CST
the user is l tty7 2017-06-04 11:34 (:0)
等号两端不能加空格!!!
11.5 重定向输入和输出
可以将命令的输出重定向到另一个位置(比如文件)。
11.5.1 输出重定向
bash shell用大于号(>)来完成这项功能: command > outputfile
之前显示器上出现的命令输出会被保存到指定的输出文件中。
$ date > test6
双大于号(>>)用于在原文件追加数据
===
11.5.2 输入重定向
输入重定向是小于号(<): command < inputfile
$ wc < test6
2 11 60
wc(words count?)命令会输出3个值:行数、词数、字节数
<< 这个连续两个小于的符号。 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的信息输出到 catfile 中, 且当由键盘输入 EOF 时,该次输入就结束』,那我可以这样做:
$ catfile << EOF
11.6 管道
command1 | command2
将command1的输出直接送到command2中
11.7 执行数学运算
在Bash shell环境中,可以利用 let、 (()) 、 [ ]、 expr 、 bc 进行数学运算
#! /bin/bash echo "数学运算篇 START" #基本运算----let a=5; b=4; echo "a = $a , b = $b" let c=a+b; echo "a + b = $c" let a++ echo "a++ = $a" let b-- echo "b-- = $b" let b+=a echo "b+=a: b = $b" #基本运算----[] echo "a = $a, b = $b" c=$[a+b] echo "\$[a+b] = $c" c=$[$a+$b] echo "\$[\$a+\$b] = $c" #基本运算----(()) c=$((a+b)) echo "\$((a+b))=$c" #基本运算----expr c=`expr 3 + 4` #注意+两侧的空格 echo "$c" c=`expr $a + $b` echo "$c" #高级运算----bc #1.计算浮点 echo "4 * 0.56" | bc a=5.5 b=3.5 c=`echo "$a * $b" | bc` echo "$a * $b = $c" #2.设定小数精度 c=`echo "scale=3; $a * $b" | bc` echo "scale=3; $a * $b = $c" #3.进制转换 d=`echo "obase=2; $c" | bc` echo "obase=2; $c = $d" #4.高级函数 a=`echo "sqrt(100)" | bc` echo "sqrt(100) = $a" b=`echo "3^3" | bc` echo "3^3 = $b" echo "数学运算篇 END"
数学运算篇 START a = 5 , b = 4 a + b = 9 a++ = 6 b-- = 3 b+=a: b = 9 a = 6, b = 9 $[a+b] = 15 $[$a+$b] = 15 $((a+b))=15 7 15 2.24 5.5 * 3.5 = 19.2 scale=3; 5.5 * 3.5 = 19.25 obase=2; 19.25 = 10011.0100000 sqrt(100) = 10 3^3 = 27 数学运算篇 END
11.7.3 浮点解决方案
var1=$(echo “scale=4; 3.44 / 5” | bc)
11.8 退出脚本
11.8.1 查看退出状态码
echo $?
===
11.8.2 exit命令
在脚本文件的最后写上 exit 5,则自定义了结束状态码5
- Linux Command Line and....ch11(构建基本脚本)
- Linux Command Line and....ch16(控制脚本)
- Linux Command Line and....ch3(基本的bash shell)
- Linux Command Line and....ch10(编辑器)
- Linux Command Line and....ch1(初识linux)
- Linux Command Line and....ch6(使用linux环境变量)
- Linux Command Line and....ch7(理解Linux文件权限)
- linux command Line and shell script bible(笔记四)
- linux command Line and shell script bible(笔记五)
- linux command Line and shell script bible(笔记七)
- linux command Line and shell script bible(笔记八)
- linux command Line and shell script bible(笔记九)
- linux command Line and shell script bible(笔记十)
- linux command Line and shell script bible(笔记十一)
- linux command Line and shell script bible(笔记十二)
- linux command Line and shell script bible(笔记十三)
- linux command Line and shell script bible(笔记十四)
- linux command Line and shell script bible(笔记十五)
- 初级阶段的Linux学习
- 简单的算法问题9——爬楼梯(动态规划)
- 需要复习的:FFmpeg源代码简单分析:结构体成员管理系统-AVClass
- emacs 自带的简单入门教程
- linux的less命令
- Linux Command Line and....ch11(构建基本脚本)
- JDK源码调试
- 重新编译Python
- 需要复习的:FFmpeg源代码简单分析:结构体成员管理系统-AVOption
- 行内元素,块级元素与空元素
- Pow(x, n)
- 欢迎使用CSDN-markdown编辑器
- 软件测试员----面试,你准备好了么?
- 阿拉伯数字转换成罗马数字