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 <<-eof
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

赞 (3)
xchlinuxxchlinux
上一篇 2018-05-15 11:21
下一篇 2018-05-15 17:24

相关推荐

  • N31第一周作业

    本周(6.18–6.24)第1周 1、描述计算机的组成及其功能。 计算机组成:硬件系统和软件系统 硬件系统:CPU:运算器和寄存器(运算器负责算术、逻辑等运算、控制器是系统的控制中心) 存储器:主要为内存,功能是存储程序和各种数据信息。 Input:下指令、提供数据到计算机,常用的输入设备有鼠标、键盘、扫描仪等 Output:输出加工的结果,常用…

    Linux笔记 2018-06-25
  • Linux系统-动态库删除或破坏等,修复操作

    Linux,CentOS7,救援模式(Rescue a CentOS System),动态库(shared libraries)

    2018-04-20
  • awk

    使用方法 awk ‘{pattern + action}’ {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用…

    2018-05-20
  • linu基础知识

    低级语言 ;机器语言,汇编语言 中级语言;C 高级语言;JAVA Objetive-C php GO cento s7.4 开源。O pen Sou软件核原代码提供所有人自由发布软件和原代码 虚拟机配置 内存;1.1G Centos7 .4 磁盘200G 光盘;ISO接 网卡;仅主机 MBR GPT 区类型 主分区;一块硬盘最i多4个,不可分小区,可以用来启…

    Linux笔记 2018-04-01
  • 虚拟化

    CPU虚拟化: 1、模拟:emulation; 2、虚拟:virtualization; a、完全虚拟化(full-virtualization):BT:二进制翻译(软件)、HVM:硬件辅助的虚拟化(硬件) b、半虚拟化(para-virtualization):   Memory虚拟化: 进程:线性地址空间 内核:物理地址空间 MMU   vir…

    2018-07-11
  • Linux第五周作业

    1、简述rpm与yum命令的常见选项,并举例 RPM: rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE] 安装:-i, –install 升级:-U, –update, -F, –freshen 卸载:-e, –erase 查询:-q, –query 校验:-V, &#821…

    2018-07-16