Bourne Shell编程杂记

首先强调一下,Bourne Shell数据类型的概念极简单:一切变量的值,都是字符串。所以,也可以认为,Bourne Shell只有一种基本数据类型,那就是字符串。

由于数据类型太简单,所以脚本中若要进行各种数学运算,只能借助其他程序(例如,expr程序)来完成。其他程序计算出的结果,在脚本中仍然保存为一个字符串。

唯一例外的是数组,他是一组字符串的集合。

脚本第一行固定为如下内容

#!/bin/sh

他表示这是一个解释器文件,由程序/bin/sh来解释执行。当然,若实际环境中sh程序不在这个路径,则调整一下即可。


好了,下面开始进入正文。


0. 变量赋值及引用

给变量赋值

VAR_NAME=expression

例如: 

a=1

a=hello

a="Hello   world!" #值为多个单词时,需要用引号括一下

引用变量的值

${VAR_NAME}  或者  $VAR_NAME


1. 命令行参数

以如下命令行为例

xxx.sh  a b c

$0  表示命令行中最左边的这部分,即用相对路径或绝对路径表示的脚本文件的路径。

实际执行时,这里是什么,就是什么。他就是原原本本的shell脚本的路径。

$#  表示参数的个数,不包括$0本身。本例中,$#为3,即3个参数:a b c。


$1 $2 $3  ......表示具体的参数。这里他们分别对应a b c


最后,对于函数的参数,$#与$1 $2 $3  ......,含义完全同上。

同时,对于函数来说,$0的值并不是函数名,而是与脚本执行命令行参数中的$0一致。


2. 保存命令执行的标准输出到变量中

a=`/path/to/program  [params ...]`

注意,不管命令的输出中是否包含分隔开的单词,整个结果都做为一个字符串保存到了变量中。

这个对于保存函数执行的标准输出也一样适用。语法也一样。

a=`function  [params ...]`


3. 数组相关

注意,所有相关的值,还是和变量的值类型一样,都是字符串。

创建数组 a=(1 2 3 4 5)

数组元素个数 ${#a[@]}  #值为5

引用元素  ${a[i]}    #注意,数组下标i从0开始

元素赋值  a[i]=100

引用整个数组的内容  ${a[*]} 或者 ${a[@]}  #值为1 2 3 4 5

最后注意一下,这里数组a的赋值比较规范。实际情况下,括号内的内容,可以是一组用分隔符(可以是空格,换行符)隔开的单词(例如 ls 命令的执行结果)。

赋值后,每个单词就是数组的一个元素,干干净净的,不包含分隔符本身。如果两个单词之间有多个分隔符,效果还是等于一个分隔符。


4. 分支语法

(i)if语句

if [ expression ]; then

    ...

elif [ expression ]; then
    ...
else
    ...
fi


(ii)for循环

item_list="1 2 3 4 5"  或者引用前面的数组生成条目列表 item_list=${a[@]}

for i in ${item_list};
do
    echo $i
done



5. sed引用shell变量

示例如下。唯一要注意的是,要使用双引号,不能使用单引号。

sed "s/something/${var_name}/g"  a.txt


6. awk引用shell变量

示例如下。

echo  1 2 3 | awk '{ if ($3=="'$var_name1'") print "'$var_name2'"}'


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值