Linux(二) Shell脚本

  • 创建shell脚本文件

  创建shell脚本文件时,必须在文件的第一行指明所使用的shell. 格式如下:

#!/bin/bash

  在普通的shell脚本中,英镑符号(#)用作注释行. shell不处理shell脚本中的注释行.但是,shell脚本文件的第一行是个特例,#后面跟着感叹号告诉shell运行下列脚本的shell(可以使用bash shell,但用另一个shell运行脚本)

  如果想将两条命令一起运行,可以将他们放在同一行,并用分号将其隔开

#!/bin/bash
# This script displays the date and who's logged on
date
who

# 1.编写如上四行脚本
# 2.将脚本文件所有目录天骄到PATH环境变量中/使用绝对路径或相对路径 来运行脚本
# 3.如果文件缺失运行权限,给文件添加运行权限后再重试(chmod u+x 脚本文件名)
# 4.运行成功
  • 显示消息(echo)

  echo命令可以显示一个简单的文本字符串,在 echo 后直接添加字符串即可. 

  默认情况下不需要使用引号来标记想要显示的字符串,如果在字符串中使用了引号,有时会出现文件

  

   [-n] : 将echo命令结果和echo文件字符串显示在同一行, 需要用引号包围字符串,同时确保在该字符串末尾有个空格. 命令的输出整好从字符串输出停止等待位置开始.

#!/bin/bash
echo -n "The time and date are: "
date

  

  • 使用环境变量

  通过使用以美元符号开头的环境变量可以从脚本中引进这些环境变量.当字符串中药使用美元符$时,需在美元符前加反斜杠

#!/bin/bash

echo "User info for userid: $USER"
echo UID: $UID
echo HOME: $HOME
echo "The cost of the item is $15"

  

  • 使用用户变量

  用户变量可以是由不超过 20个字符的字母 数字或下划线组成的文本字符串.用户变量区分大小写, 值通过等号赋值给用户变量. 在变量 等号 变量值之间不允许有空格

  shell脚本自动为变量值确定数据类型,脚本中定义的变量在shell脚本的生命周期内保留它们的值,但是当shell脚本完成时就被删除了

  

   当在赋值语句中使用变量value1的值时, 需使用美元符号,如果忘了使用美元符号脚本会当成字符串处理

value1=10
value2=$value1
echo The resulting value is $value2
# 输出: The resulting value is 10

Value2=value1
echo The resulting value is $value2
# 输出: The resulting value is value1

  

  • 反引号(`)

  反引号允许将shell命令的输出赋值给变量

#!/bin/bash
today=`date +%y%m%d`
ls /usr/bin -al > log.$today
# +%y%m%d 格式指示date命令使用两位数来显示年月日
# 2020年1月1日 运行脚本会生成一个log.020101 日志文件

  

  • 输出重定向(> , >>)

  重定向的最基本类型是通过一条命令将输出发送到文件中.bash shell重定向为此使用大于号: Command > outputfile

  重写重定向(>)操作会创建一个文件(使用了默认的umask设置),并且将date命令的输出重定向到所创建的文件中.如果文件已经存在就会重写已经存在的文件

  追加重定向(>>)会将数据追加到文件夹中,使用两个>

  

  • 输入重定向(<, <<)

  将一个文件的内容重定向到一条命令中

  

   输入重定向还有另一种方法,称为内置输入重定向.这种方法允许在命令行中而非文件中为输入重定向指定数据

  内置输入重定向符号是两个小于号(<<).除了这个符号,还必须指定一个文本标记来说明输入数据的开始和结尾.文本标记可以使用任何字符串值,,但是在数据的开始和结尾处必须相同

command << marker
> data
> marker

wc << EOF
> test string 1
> test string 1
> test string 1
> EOF
# 输出 3 9 42

  次提示会为更多的数据继续提示知道输入文本标记. wc命令计算内置输入重定向提供的数据的行, 单词, 字节的数目

  

  • 管道(|)

  有时需要将一个命令的输出发送至另一个命令的输入. 使用重定向可以做到这一点,但是这有些笨拙

rpm -qa > rpm.list
sort < rpm.list

# rpm命令用Red Hat软件包管理系统(RPM)管理安装在系统中的软件包.
# 当与参数-qa一起使用时,它会生成已安装软件包的列表,但是未必以特定的顺序显示.

  使用管道 (|), 可以轻松地将rpm命令的输出直接传送给sort命令

rpm -qa | sort


# 命令中可以使用数量不限的管道数(行长度最多是255个字符).可以连续将命令的输出传送给其他命令已改进操作
# 由于sort命令的输出急剧增大,可以使用一种文本分页命令(less / more), 将输出强制停留在每一屏的数据上
rpm -qa | sort | more

  

原文地址:https://www.cnblogs.com/lab-zj/p/12911756.html