UNIX sh(Bourne Shell)脚本里面使用数组的两种方法

sh 不像 bash 和 ksh 那样可以非常方便的定义和使用数组,但是可以通过其它方式来模拟数组。

【方法1】通过 set 命令和位置参数来模拟数组

# 定义数组
set 'word 1' word2 word3

# 输出数组的第一个元素
echo $1

# 输出数组的第二个元素
echo $2

# 输出数组的第三个元素
echo $3

# 输出数组的所有元素
echo $*
echo $@

# 向数组中增加一个元素
set -- "$@" word4
echo $4

# 查看数组元素的个数
echo $#

# 遍历数组元素
for i in do "$@"; do
  echo "$i"
done

# 从数组中删除一个元素
shift
echo $@

# 删除数组的所有元素
set x; shift

【方法2】使用 eval 命令模拟数组

定义数组并遍历数组元素:

#!/bin/sh
eval a1=word1
eval a2=word2
eval a3=word3
for i in 1 2 3; do
  eval echo "The $i element of array is: \$a$i"
done

根据用户输入的一句话来定义数组并遍历数组元素:

#!/bin/sh
echo "Enter the sentence:"
read str
n=0
for word in $str; do
  n=`expr $n + 1`
  eval a$n="$word"
  eval echo "The $n element of array is: \$a$n"
done
(0)

相关推荐

  • UNIX sh(Bourne Shell)脚本里面使用数组的两种方法

    sh 不像 bash 和 ksh 那样可以非常方便的定义和使用数组,但是可以通过其它方式来模拟数组. [方法1]通过 set 命令和位置参数来模拟数组 # 定义数组 set 'word 1' word2 word3 # 输出数组的第一个元素 echo $1 # 输出数组的第二个元素 echo $2 # 输出数组的第三个元素 echo $3 # 输出数组的所有元素 echo $* echo $@ # 向数组中增加一个元素 set -- "$@" word4 echo $4 # 查看数组元

  • Shell脚本之无限循环的两种方法

    for 实现: 复制代码 代码如下: #!/bin/bash set i=0 set j=0 for((i=0;i<10;)) do         let "j=j+1"         echo "-------------j is $j -------------------" done while实现: 复制代码 代码如下: #!/bin/bash set j=2 while true do         let "j=j+1"

  • Linux通过Shell脚本命令修改密码的两种方式

    交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. passwd username 使用passwd username 修改 username 的密码: 使用该命令会有提示,即进入了交互界面,输入密码即可. 使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了. 此时可以使用如下两种方式修改密码: 方式1:

  • 指针操作数组的两种方法(总结)

    指针操作数组,方法一是p+index,方法二是p[index],第二种方法跟数组访问方法是一样的. 数组引用返回的是数组的第一个元素的指针地址. 可以将指针指向数组的任意元素,然后从那里开始访问,只要注意不越界就行了,这说明数组只是将元素连续堆叠,并不需要也没有其他的配置信息存放在数组元素之外的地方或者在头尾等等任何地方,都没有,他只是连续的存储而已. #include <iostream> using namespace std; int main() { const int ARRAY_L

  • JavaScript判断对象和数组的两种方法

    在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象),而在有数据时返回的是json对象,所以在接收到后端返回的接口时就需要首先判断返回的数据是对象还是数组,这里提供一些方法  方法一: //判断是否为数组 function isArray(obj) { return obj instanceof Array; } //判断是否为对象 function isObject(obj) { return obj instanceof Objec

  • laravel框架查询数据集转为数组的两种方法

    方法一: return DB::table('game_matchperiod')->select('starttime')->where('Type',$type)->get() ->map(function ($value) {return (array)$value;})->toArray(); 方法二: public function objToArr($object) { //先编码成json字符串,再解码成数组 return json_decode(json_en

  • BAT脚本批量修改文件名的两种方法

    目录 一,先进入想要修改文件名的文件夹中,使用命令: 1.以示例文档为例进行说明 2.双击1.bat来生成yuan.xls文件,如下图: 二.直接通过BAT脚本实现 通过BAT脚本批量修改文件名的办法有两种: 一,先进入想要修改文件名的文件夹中,使用命令: dir /b "*.后缀名" > yuan.xls 从生成含有所需文件名的xls文件(即Excel文件),然后在xls文件中通过 CONCATENATE("ren ",A2," ",B2

  • python脚本设置系统时间的两种方法

    本文为大家分享了两种python脚本设置系统时间的方法,供大家参考,具体内容如下 第一种方法,使用Python设置系统时间,即给系统校时 #电脑时间用了一段时间后,系统时间不准了,想更新一下 #在windows里面,更新系统时间,时常失败,而且速度很忙. #在网上拷贝的代码,发现很好用,比windows自带的实现要快. #-*- coding:utf-8 -*- import socket import struct import time import win32api TimeServer

  • PHP中数组合并的两种方法及区别介绍

    PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码 代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = array( 'where' => 'uid=2', 'order' => 'uid desc', ); 1. array_merge,如果两个数组存在相同的key,后面的一个会覆盖前面的 复制代码 代码如下: <?php $c = array_merge($a, $b); var_ex

  • shell脚本字符串和数组的使用操作方法

    字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bash username="mayuan" str_1="hello ${username}" str_2='hello ${username}' echo $str_1 # hello mayuan echo $str_2 # hello ${username} 获取字符串的长度 #! /bin/bash username="mayuan" echo ${

随机推荐