【Linux Shell脚本语言学习】(二)

文章目录

    • 屏幕输出echo
    • 变量
      • 1.环境变量
      • 2.用户变量
      • 3.命令替换
    • 重定向输入和输出
      • 1.输出重定向
      • 输入重定向
    • 执行数学运算
      • 1.expr 命令
      • 2.使用方括号
      • 3.浮点解决方案
    • 注释

屏幕输出echo

通过 echo 命令可以实现输出,如果在 echo 命令后面加上了一个字符串,该命令就能显示出这个文本字符串。默认情况下,不需要使用引号将要显示的文本字符串划定出来。但有时在字符串中出现引号的话就比较麻烦了。

#!/bin/bash
echo "The time is `date+ %T` "
	输出:The time is 21:37:24

如果在输出的字符串中需要有引号,那么这种做法就不可行了。例如有单引号,这种情况下有两种解决方案,第一,通过转义字符""。第二,通过使用另外一种引号将字符串括起来。
例如:

#!/bin/bash
echo "I'll do it"
echo You\'re powerful.
	输出:I'll do it
		 You're powerful.

变量

1.环境变量

shell维护着一组环境变量,用来记录特定的系统信息。比如系统的名称、登录到系统上的用户名、用户的系统ID(也称为UID)、用户的默认主目录以及shell查找程序的搜索路径。可以用set 命令来显示一份完整的当前环境变量列表。

zhao@zhao-HP-246-G3-Notebook-PC:~/linux_shell$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_REMATCH=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="3" [2]="48" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")

在脚本中,你可以在环境变量名称之前加上美元符( $ )来使用这些环境变量。例如,在文件中输入以下语句。

#!/bin/bash
echo "User info for userid: $USER"
echo "LOGNAME: $LOGNAME"
echo HOME:$HOME

输出:

User info for userid: zhao
LOGNAME: zhao
HOME:/home/zhao

小注意:如果输出的字符串中需要包含美元符号$,那么需要使用转义字符。

2.用户变量

除了环境变量,shell脚本还允许在脚本中定义和使用自己的变量。定义变量允许临时存储数据并在整个脚本中使用。
用户变量可以是任何由字母、数字或下划线组成的文本字符串,长度不超过20个。
例如

#!/bin/bash
var1=10
echo $var1   #注意这里使用了 $ 符号
var2=$var1   #注意这里使用了 $ 符号
echo $var2

输出:

10
10

注意:

  1. 使用等号将值赋给用户变量。在变量、等号和值之间不能出现空格。
  2. 与系统变量类似,用户变量可通过美元符引用。

3.命令替换

shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。这个特性在处理脚本数据时尤为方便。
有两种方法可以将命令输出赋给变量:

  • 1.反引号字符( ` )
  • 2.$() 格式

例1

#!/bin/bash
d=`date +%Y-%m-%d-%T`
echo $d

输出:

2018-11-08-22:36:23

例2,通过一下命令可以生成一个以当前年月日+时间命名的文件。

#!/bin/bash
today=$(date +%Y-%m-%d-%T)
touch $today

在这里插入图片描述

重定向输入和输出

有些时候你想要保存某个命令的输出而不仅仅只是让它显示在显示器上。 bash shell提供了几个操作符,可以将命令的输出重定向到另一个位置(比如文件)。重定向可以用于输入,也可以用于输出,可以将文件重定向到命令输入。

1.输出重定向

最基本的重定向将命令的输出发送到一个文件中。bash shell用大于号(>)来完成这项功能。 命令格式如下:
command > outputfile
之前显示器上出现的命令输出会被保存到指定的输出文件中。如果你指定的文件并不存在,那么会自动生成。
重定向操作符会用新的文件数据覆盖已有文件。
你可能并不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,比如你正在创建一个记录系统上某个操作的日志文件。在这种情况下,可以用双大于号(>>)来追加数据。
实例:

#!/bin/bash
date >> outputfile
echo '---------' >> outputfile
pwd >> outputfile
echo '---------' >> outputfile
ls >> outputfile 
echo '---------' >> outputfile
echo end >> outputfile

输出:

2018年 11月 08日 星期四 22:51:52 CST
---------
/home/zhao
---------
anaconda3
cpu.cpp~
Desktop
Documents
Downloads
echo_l.sh
examples.desktop
linux_shell
Music
outputfile
Pictures
Public
Templates
test.py
Videos
workspace
zhao
zhao1.c
zhao2
zhao2.cpp
zhao3
#zhao3.cpp#
zhao3.cpp
zhao.c
---------
end

输入重定向

输入重定向和输出重定向正好相反。输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。输入重定向符号是小于号(<)。命令格式:
command < inputfile
例如:
在上面生成的outputfile目录下,打开命令窗口,输入以下命令:
$ wc < outputfile
输出:30 35 306
wc 命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值:

  • 文本的行数
  • 文本的词数
  • 文本的字节数

执行数学运算

在shell脚本中有两种途径来进行数学运算。

1.expr 命令

使用expr命令是很麻烦的。例如:
在命令行可以输入一下操作

expr 1 + 5

输出:
6

expr 5 \* 2

输出:
10
在脚本文件中使用也很麻烦

var1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3

输出:
The result is 2
注意:变量或者数字和运算符之间需要加空格

2.使用方括号

在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号( $[ operation ] )将数学表达式围起来。这是一种更为简单的方法。

$ var1=$[1 + 5]
$ echo $var1

输出:
6

3.浮点解决方案

  1. bc 的基本用法
    在命令窗口直接输入bc便可以开始使用
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
12 * 5.4
64.8
  1. 在脚本中使用 bc
    基本格式如下:
    variable=$(echo "options; expression" | bc)
    expression 参数定义了通过 bc 执行的数学表达式。
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1

输出:
The answer is .6880

注释

单行注释:在前面加上”#“号。
多行注释:使用如下格式
:>>!
…需要注释的代码…
!
参看:《Linux命令行与shell脚本编程大全.第3版》

你可能感兴趣的:(ubuntu_linux)