shell脚本实例

第一个脚本

#!/bin/bash

echo "Hello World !“

1.例如脚本test.sh中第一行一定是 “#!/bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。

2.’#’在前面讲过表示注释,也可用来写脚本说明。即后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等,以供日后查看用,所以写上注释是有必要的。另外也供其他系统管理员能看懂你的脚本。

3.该脚本第一行再往下走便是要运行的命令了。

运行 Shell 脚本有两种方法:

1、作为可执行程序 将上面的代码保存为 test.sh,并 cd 到相应目录: chmod +x ./test.sh #使脚本具有执行权限 ./test.sh 执行脚本,我们用vim编辑的文档默认是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’./filename’ 执行这个脚本了。

2、作为解释器参数 这种运行方式是,直接运行解释器,如: /bin/sh test.sh /bin/bash test.sh 这种方式运行的脚本,不需要在第一行指定解释器信息,因为脚本解释器(sh或bash)已经明确地被用来执行脚本文件test.sh。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.显示换行   echo -e "OK! " # -e 开启转义

       echo "It is a test"

   输出结果:OK!

      It is a test

2.显示不换行   echo -e "OK! c" # -e 开启转义 c 不换行

                  echo "It is a test"

   输出结果:  OK! It is a test

3.显示命令执行结果    echo `date`           注意: 这里使用的是反引号 `, 而不是单引号 '。 结果将显示当前日期

4.使用变量       使用一个定义过的变量,只要在变量名前面加上美元符号($)即可,例如:

your_name=“rli“

echo $your_name

echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

echo "I am good at ${skill}Script" done

如果不给skill变量加花括号,写成 echo "I am good at $skillScript“ 解释器就会把skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

  只读变量    readonly  var  使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    删除变量    使用 unset 命令可以删除变量。语法: unset variable_name

Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

-eq   等于则为真

-ne   不等于则为真

-gt   大于则为真

-ge   大于等于则为真

-lt   小于则为真

-le   小于等于则为真

字符串测试

=   等于则为真

!=   不相等则为真

-z   字符串 字符串的长度为零则为真

-n   字符串 字符串的长度不为零则为真

文件测试

-e 文件名    如果文件存在则为真

-d 文件名   如果文件存在且为目录则为真

-f 文件名   如果文件存在且为普通文件则为真

-r 文件名   如果文件存在且可读则为真

-w 文件名   如果文件存在且可写则为真

-x 文件名   如果文件存在且可执行则为真

-s 文件名   如果文件存在且至少有一个字符则为真 

-c 文件名   如果文件存在且为字符型特殊文件则为真

-b 文件名   如果文件存在且为块特殊文件则为真

Shell 传递参数

我们可以在执行 Shell 脚本时,通过一种shell脚本预设变量向脚本传递参数,脚本内获取参数的格式为:$n(即脚本预设变量)。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

另外,还有几个特殊字符用来处理参数:

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数。 如“$*”,即指用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$$ 脚本运行的当前进程ID号(= PID = Process ID)

$! 后台运行的最后一个进程的ID号

$? 显示上一个命令的退出状态。0表示没有错误,其他任何值表明有错误。

数组

数组(Array)中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。

与大部分编程语言类似,数组元素的下标由0 (即zero-based)开始。 Shell 数组用括号来表示,元素用"空格"符号分割开,

语法格式如下: array_name=(value1 ... valuen)

实例

#!/bin/bash

my_array=(A B "C" D)

我们也可以使用下标来定义数组:

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

读取数组

读取数组元素值的一般格式是: ${array_name[index]}

实例

#!/bin/bash

my_array=(A B "C" D)

echo "第一个元素为: ${my_array[0]}"

echo "第二个元素为: ${my_array[1]}"

echo "第三个元素为: ${my_array[2]}"

echo "第四个元素为: ${my_array[3]}"

获取数组中的所有元素 使用@ 或 * 可以获取数组中的所有元素,例如:

echo "数组的元素为: ${my_array[*]}"

echo "数组的元素为: ${my_array[@]}"

获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同,例如:

echo "数组元素个数为: ${#my_array[*]}"

echo "数组元素个数为: ${#my_array[@]}"

流程控制

和Java、PHP等语言不一样, sh/bash的流程控制不可为空。如果else分支没有语句可执行,就不要写这个else。

if语句

if 判断语句;then

  command

fi

for 循环语句

for var in item1 item2 ... itemN

do

  command

done

 while循环语句

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

while 判断条件

do

  command

done

case 语句

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in

模式1)

  command ;;

模式2) 

  command ;;

esac

Shell 函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

fun3()

{

echo "$0 = $0"

# 获取调用函数时 传入的参数

echo "$1 = $1"

echo "$2 = $2" return 22

}

#调用函数并传递参数 fun3 params1 params2 params3

用shell脚本编程计算两个数的和。

#!/bin/bash

a=1

b=2

sum=$[$a+$b]

echo “Sum is $sum.”

数学计算要用’[ ]’括起来并且外头要带一个’$’。 脚本执行结果为: Sum is 3.

原文地址:https://www.cnblogs.com/bfcs/p/10710214.html