shell脚本编程

shell编程基础

  本篇文章主要介绍shell编程的基础知识,首先介绍shell脚本的第一行#!(shebang)、shell脚本中的注释、如何设置脚本的权限并运行脚本,然后介绍shell变量的进阶知识和shell的算术表达式,最后介绍shell脚本的退出状态以及如何吊事shell脚本。

shell脚本的第一行“#!”

  #!(shebang)是一个由井号“#”和叹号“!”构成的字符序列。它是出现在shell脚本文件第一行的前两个字符。脚本中的#!行(第一行)用于指示一个解释程序。

  #!行的语法格式如下:

#! INTERPRETER [OPTION]...

注意:INTERPRETER必须是一个程序的绝对路径。

  在Linux系统中,当一个以#!开头的脚本作为一个程序运行时,程序加载器会将脚本第一行“#!”之后的内容解析为一个解释程序,然后用这个指定的解释程序替代改脚本去运行,并将脚本的路径作为第一个参数传递给解释程序。例如,一个脚本的路径名是path/to/script,它的第一行内容如下:

#!/bin/bash

  程序加载器被指示用解释程序“/bin/bash”替代其运行,并将路径path/to/script作为第一个参数传递给解释程序“/bin/bash”。

  几乎所有的bash脚本的内容都是以“#!/bin/bash”,这可以确保bash作为脚本的解释程序,及时改脚本运行在其他shell下。如果bash脚本中没有指定“#!”行,则会默认使用“/bin/sh”作为解释程序,但还是推荐将bash脚本的第一行设为“#!/bin/bash”。

shell脚本注释

  在shell脚本中,井号“#”是注释标识符。如果脚本的某行含有#或以#开头(除了$#),那么这一行或在#之后的所有内容都将被程序忽略,#之后的内容称为注释。

  shell脚本的注释用于解释脚本及其相关语句的含义,使这些脚本的源代码更容易理解,也便于对脚本的维护和更新。

  来看下面的这个脚本:

#!/bin/bash
# A Simple Shell Script To Get Linux Date & Hostname & Network Information
# Zhang Renguo - 2025-06-25

echo "Current date : $(date) @ $(hostname)"
echo "Network configuration"

/sbin/ifconfig -a

  在上面的脚本中,第一行#!(Shebang)行。接下来的两行即为注释行:

# A Simple Shell Script To Get Linux Date & Hostname & Network Information
# Zhang Renguo - 2025-06-25

  在shell脚本中,还可以使用bash的HERE DOCUMENT特性添加多行的注释内容,请看下面的脚本内容:

#!/bin/bash
echo "Say something"
<<COMMENT
    comment line 1
    comment line 2
    comment line n
COMMENT
echo "Do something else"

  在上面的输出中,第3~7行即为注释内容。

实例:如何设置脚本的权限并执行脚本

  在运行一个shell脚本之前,需要确保shell脚本文件具有可执行的权限,否则当直接运行脚本时,会得到如下Permission denied的错误信息:

-bash: ./multicomments.sh: 权限不够

  如果遇到上述问题,就需要给脚本文件添加可执行的权限。

[root@localhost scripts]# chmod u+x multicomments.sh

  如果要给所有用户执行脚本的权限,则使用如下命令:

[root@localhost scripts]# chmod +x multicomments.sh

  运行一个shell脚本,使用绝对路径或相对路径两种方式都可以。

  使用绝对路径运行shell脚本的方法如下:

[root@localhost scripts]# /scripts/helloworld.sh
Hello World

  使用相对路径运行shell脚本的方法如下:

[root@localhost ~]# cd /scripts/
[root@localhost scripts]# ./helloworld.sh
Hello World

  也可以像运行一个命令一样运行一个shell脚本,即不需要指定绝对路径或相对路径,只需要输入脚本名称即可。要实现这个目的,需要将shell脚本所在的目录路径添加到PATH环境变量。例如,将目录路径“/scripts”加入PATH环境变量,可以在任何路径下直接运行目录“/scripts”下的shell脚本:

export PATH=$PATH:/scripts
[root@localhost scripts]# cd /tmp
[root@localhost tmp]# helloworld.sh
Hello World

shell变量进阶

 

bash的参数扩展

  参数是一个存储数值的实体,并由名称、数字或特定符号所引用。

  •   被名称引用的参数称作变量;
  •   被数字引用的参数称作为位置参数;
  •   被特定符号引用的参数具有特殊的含义和用途,作为bash特殊的内部变量

  参数扩展是从引用的实体中取值的过程,就像扩展变量打印它的值。

  字符“$”会引导参数扩展,要扩展的参数名或符号可以放在花括号中。花括号虽然是可选的,但是可以保护待扩展的变量,使得紧跟在花括号后面额内容不会被扩展。通过下面的例子来了解一下参数扩展额各种形式:

  基本的参数扩展:

$PARAMETER
${PARAMETER}

  如果参数名后面还紧跟着其他字符,这是使用花括号{}是必须的,否则紧接在参数名后面的字符串会被解释为参数名的一部分。例如,打印一个单词后跟字母s:

WORD=car
echo $WORDs

echo ${WORD}s
cars

   在上面的输出信息中,第一个打印的内容是空的,这是因为参数名WORDs是未定义的。对于不适用花括号的参数扩展,bash会将从字符“$”开始到最后一个有效字符结束的所有可以的字符序列截石位参数名。当使用花括号时,会强制bash直接是花括号内的名称。

  另外,对于访问$9之后的位置参数也同样需要使用花括,示例如下:

echo "Argument 1 is: $1"
echo "Argument 10 is: ${10}"

注意:参数名是大小写敏感的。

  简介参数扩展:

${!PARAMETER}

 

 

bash的内部变量

bash的位置参数和特殊参数

实例:使用declare指定变量的类型

bash的属组变量

shell算术运算

bash的算术运算符

数字常量

使用算术扩展和let命令进行算术运算

实例:使用expr命令

退出脚本

退出状态码

实例:使用exit命令

实例:调试脚本

shell脚本编程风格

小结

posted @ 2025-06-25 02:29  张仁国  阅读(64)  评论(0)    收藏  举报
目录代码