78 lines
1.9 KiB
Bash
78 lines
1.9 KiB
Bash
#!/bin/bash
|
||
##############
|
||
##Author: yul1
|
||
##Date: 2019-09-13 11:29:25
|
||
##LastEditors: yul1
|
||
##LastEditTime: 2019-09-13 12:03:10
|
||
##Description:
|
||
##############
|
||
|
||
#在示例中,行分隔符(第1维)是空格字符。为了引入字段分隔符(第二维),使用标准unix工具tr。用于附加尺寸的附加分隔符可以以相同的方式使用。
|
||
|
||
#当然,这种方法的性能不是很好,但是如果性能是不是一个标准,这种做法是非常通用的,可以解决很多问题:
|
||
|
||
array2d="1.1:1.2:1.3 2.1:2.2 3.1:3.2:3.3:3.4"
|
||
|
||
function process2ndDimension {
|
||
for dimension2 in $*
|
||
do
|
||
echo -n $dimension2 " "
|
||
done
|
||
echo
|
||
}
|
||
|
||
function process1stDimension {
|
||
for dimension1 in $array2d
|
||
do
|
||
process2ndDimension `echo $dimension1 | tr : " "`
|
||
done
|
||
}
|
||
|
||
process1stDimension
|
||
|
||
##该样品的输出是这样的:
|
||
|
||
##1.1 1.2 1.3
|
||
##2.1 2.2
|
||
##3.1 3.2 3.3 3.4
|
||
|
||
|
||
|
||
|
||
#!/bin/bash
|
||
##提取控制台上w命令给出的:USER,TTY和FROM值.在bash中我试图获取此输出并将这些值放入多维数组(或只是一个带空格分隔符的数组).
|
||
w|awk '{if(NR > 2) print $1,$2,$3}' | while read line
|
||
do
|
||
USERS+=("$line")
|
||
echo ${#USERS[@]}
|
||
done
|
||
echo ${#USERS[@]}
|
||
|
||
#!/bin/bash
|
||
USERS=()
|
||
shopt -s lastpipe
|
||
w | awk '{if(NR > 2) print $1,$2,$3}' | while read line; do
|
||
USERS+=("$line")
|
||
done
|
||
echo ${#USERS[@]}
|
||
|
||
##可以使用process substitution而不是管道,以便read命令在主shell进程中运行.
|
||
|
||
#!/bin/bash
|
||
USERS=()
|
||
while read line; do
|
||
USERS+=("$line")
|
||
done < <(w | awk '{if(NR > 2) print $1,$2,$3}')
|
||
echo ${#USERS[@]}
|
||
|
||
##可以使用可移植方法,该方法适用于没有进程暂停或ksh / zsh行为的shell,例如Bourne,dash和pdksh. (对于数组,您仍然需要(pd)ksh,bash或zsh.)运行需要管道内管道数据的所有内容.
|
||
|
||
#!/bin/bash
|
||
USERS=()
|
||
shopt -s lastpipe
|
||
w | awk '{if(NR > 2) print $1,$2,$3}' | {
|
||
while read line; do
|
||
USERS+=("$line")
|
||
done
|
||
echo ${#USERS[@]}
|
||
} |