linux命令遍历数组元素,shell脚本:判断,循环及数组切片

条件判断:case语句

case 变量引用 in

PAT1)

;;

PAT2)

;;

*)

默认分支

;;

esac

case支持glob风格的通配符:

*: 任意长度任意字符

?: 任意单个字符

[]:指定范围内的任意单个字符

a|b: a或b

abc|efg : abc或efg

循环:

while 的特殊用法:

while read LINE;do

file=/path/to/somefile

指令

done < /path/to/somefile

读取文件中的第一行进行处理

$LINK 表示要处理文件的每行

********************************

break 条件成立就退出内循环但会正常执行外循环的后续指令,并进行下一轮的外循环

break 2 :直接退出外循环,退出脚本

continue :

条件成立就跳过本次内循环进行下一轮的内循环;内循环后面的指令不执行但外循环后面的指令可以继续

continue 2 退出内循环continue后面的内,外循环的指令都不执行;开始下一轮的外循环执行

***********************

for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))

do

循环体

done

for 变量名 in 列表 ;do

循环体

done

for后是变量名不是变量引用所以不用加$

in 后面可以用指令“ls /boot” 或通配符不加”“ 位置变量”$@”

for i in {1..10};do

cat >>f1 <

xxx

eof

done

*****************************

在脚本最后加上wait 则在后台执行的程序时间到会自动终止

let 定义变量时 后面运算结果为0时返回假

let 命令i=0 i++ 则第二次循环会先看i的值再加1,i=0则返回假

let i++ 是先赋值(调用)i的值再加1

let ++i 是i先+1再赋值i

例:

i=3

a=$((i++) 先把i的值赋给a,然后i加1 ,所以a=3,i=4

b=$((++i) 先把i的值加1,i=5,再赋给b,b=5

*********************************

n=10 ;eval echo {1..$n}

eval会先识别{}里面的变量

for i in eval {1..$n};do

don

************************************

pgrep httpd 查看服务是否开启

killall -0 httpd &>/dev/null

-0 发信号检查错误为假则服务没有启动

while : ;do

if killall -0 httpd &>/dev/null ;then

:

else

sysemctl restart httpd

echo at `date +%F %T` restart httpd >>/path/to/*.logs

将执行记录在目录文件中

fi

sleep 10

done

里面的“:”是什么也不做的意思

************************************

自动创建菜单

PS3=”please choose the var(1-4) : ”

select var in baoyu yanwo ;do

case $var in

baoyu)

echo $var price is 1000

break

;;

yanwo)

….

;;

esac

done

配合case判断

$var :可以是列表中的每一个参数(自动生成)

PS3:提示输入符

选择是1则是把$var赋值为baoyu

数组名称

下标

数值索引:编号从0开始

关联数组:下标可以是任意字符串即关联索引的数组

稀疏格式 :索引不连续

访问数组里的变量要通过数组名和下标

声明数组

declare -a

declare -A 关联数组

普通数组:

数组名 下标 =”变量值”

var[0]=”ceo”

var[1]=”coo”

……

一次性赋值一个元素:

mane=(“mage” ”wang“)

交互式赋值:

read -a var

ceo cto boss

echo ${var[1]} cto

declare -a var

var【2】=ceo

filename=`ls /etc`

echo ${filename[*]}

同上也可以

filename=(/etc/*)

*********************

稀疏式赋值

关联数组赋值:

显示数组:

echo ${var} 默认是0(ceo)

echo ${var[1]}

echo ${name[0]}为mage

*********************************

查看数组所有元素:

ehco ${数组名[*]}

echo ${数组名[@]}

查看数组元素个数:

echo ${#v数组名【*】}

name[${#name[*]}]=x

给一个数组添加一个新值

name[数组元素个数]=x

unset 数组名 删除数组所有值

********************

字符串切片:

${#var}

: 3 跳过3个

: -3 只取倒数3个(单个负数要加空格)

:3:4 跳过3个取4个

:3:-4 除了前三后4只要中间

echo ${var#*word}

从左到右

#最左边第一个开始到第一次匹配到关键字结束的都删除

word为关键字可以为“:” “ ”空格不用加引号或单个字母

## 贪婪模式

最左边第一个开始到最后一次匹配到关键字结束的都删除

从右到左

echo ${var%:*}

%% 贪婪模式

从右到:左删除{var//root/wang}

贪婪模式配置到的都替换

查找并删除

${var/pattern}:删除var表示的字符串中第一次被pattern匹配到的字符串

${var//pattern}:删除var表示的字符串中所有被pattern匹配到的字符串

${var/#pattern}:删除var表示的字符串中所有以pattern为行首匹配到的字符串

${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串

字符大小写转换

${var^^}:把var中的所有小写字母转换为大写

${var,,}:把var中的所有大写字母转换为小写

#开头是

echo ${VAR/#root/wang}

以root开头非贪婪模式

%结尾是

ehco ${var/%root/wang}

以root结尾的替换非贪婪模式

间接变量引用

var=ceo

ceo=wang

eval echo \$$var(相当于$ceo)

wang

echo ${!var}

wang

cmd=hostname

$cmd则直接执行hostname

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98577