linux操作系统——shell编程

Shell是一个命令解释器。与Python,R等脚本语言类似,我们既可以在命令解释器上把命令一行一行敲出来执行,也可以把很多行保存到一个文件(即脚本/script),再让命令解释器执行这个文件。Window里管这个叫批处理(Batch)。因此凡是可以在终端上运行的命令,都可以写到shell脚本里。另外,shell支持变量、分支语句、循环、自定义函数,因此可以用shell脚本实现比较复杂的操作,从而将常规系统管理的操作变成可复用的模块。Shell编程是Linux运维人员必备能力。通过本实验仅能掌握其基本语法,但是想达到企业级应用的水平,需要掌握更多命令,尤其是文本处理命令sed和awk最为重要,以及计划任务、各种系统管理命令等。

编写第一个shell脚本

新建一个shell脚本文件,请注意,文件名后缀一定为.sh。

vi hello.sh

打开vi编辑模式

#!/bin/sh
echo 'Hello World!'

echo命令用于将一个字符串在终端上打印出来。

有两种方法可以用来执行这个脚本。

最简单的方法,用sh命令去解释它。

sh hello.sh

当然,也可以把它作为一个可执行程序运行,但需要添加可执行权限。

chmod +x hello.sh
./hello.sh

Sharp-Band(#!)和注释

Shell脚本的首行要写上“#!/bin/sh”,前面最开始的两个字符“#!”正好组成一个16bit的幻数即0x2321。在unix中执行一个可执行程序时,操作系统将查看该文件的前几个字节,即所谓的“幻数”。它可以用来决定程序的格式以及如何执行它。“#!/bin/sh”表明该script由/bin/sh进行解释执行。——当然,对于大部分Linux系统,你不写同样可以顺利执行,但100%建议你一定要写。

和其他脚本语言一样,Shell脚本只支持单行注释,以“#”开头。

#!/bin/sh
#My first shell script
echo 'Hello World!'

分号的作用

使用分号可以将本应写在两行的内容写在一行上,除此之外并没有使用的必要。

变量

shell中的变量只有一种,就是字符串(当然稍后我们会讲也可以将其作为数值处理)。脚本语言的变量不需要声明,直接赋值即可。

HELLO='Hello World'

注意,“=”的两边绝对不能出现空格。shell脚本是逐句、直接进行解释,如果写了空格,就会被shell认为是一个命令。

单引号和双引号

在shell里,字符串通常并不需要用引号引用才能表示。但如果字符串包含空格的话,就需要引号了,否则就会被认为是多个字符串——语法就会发生错误。

单引号和双引号都可以用来表示字符串,区别在于单引号引用的字符串中的全部字符,包括shell中的特殊字符/语法,都作为普通字符进行处理。而用双引号引用的字符串中的shell符号/语法会进行转义/解释。

变量的引用和打印变量

用$ {变量名}或 $ 变量名引用一个变量。而且可以用${变量名:index:length}轻松地截取字串。

注意$HELLO是我们上面赋值过的那个“Hello World”字符串,而HELLO只是一个内容为“HELLO”的字符串。

echo用来在终端上打印一个字符串。

echo ${HELLO}
echo $HELLO
echo ${HELLO:0:5}
echo ${HELLO:2:5}
echo ${HELLO:2}

请大家通过运行以上命令,自己掌握字符串截取。

set命令可以显示当前工作空间全部的变量和它们的值。

unset 变量名用来清除一个变量。

特殊的变量

变量 说明
$# 参数的个数
$number 第number个参数,例:./my.sh abc,$0的值就是./my.sh,$1的值就是abc
$$ 当前进程的PID
$? 上一次命令的exit值(0-255),0代表没有错误,其他值(1-255)代表有错误
$@ 代表了参数的内容
$! Shell最后运行的后台Process的PID

变量的组合

把字符串放在一起就可以了: $ {variable-name1}${variable-name2}。

例:

TMP_VAR1='Hello, '
TMP_VAR2='World'
echo ${TMP_VAR1}${TMP_VAR2}

变量的默认值/自动初始化

如果变量已经被初始化,则使用它;如果没有被初始化,则使用默认值,但不会对该变量进行初始化。语法:${variable:-value}

例:

echo "This color is ${COLOR:-green}"
#可以打印出green,但是COLOR并没有初始化
echo $COLOR

COLOR=blue
echo "This color is ${COLOR:-green}"
#这次会打印出blue

如果希望使用默认值的同时又进行初始化,则使用:${COLOR:=green}。

要一直使用绝对路径

要一直使用绝对路径,并应该用一个变量保存它。因为你的脚本可能会被移动,或是在其他机器上使用。通过绝对路径及变量,增加你的脚本的可重用性。

例:

SRC_FILE='/tmp/message1'
DST_FILE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Env1sage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值