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
下一篇 2018-05-15

相关推荐

  • 运维之pxe、dhcp、cobbler

    运维之pxe、dhcp、cobbler 把一个主机接入TCP/IP网络,要配置哪些网络参数:ip/mask、gateway、dns server;参数配置方式:1、静态配置;2、动态分配:a、bootp协议b、dhcp协议:引入了“租约”的bootp; DHCP:动态主机配置协议:arp:address resolving protocol:地址解析协议:I…

    Linux笔记 2018-07-22
  • lvm

    。。

    Linux笔记 2018-05-02
  • 正则表达式及vim使用方法

    正则表达式(正则表达式匹配的是文本内容中的字符串,通倍符匹配的是文件名)REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能程序支持:grep,sed,awk,vim, less,nginx,varnish等分两类:不同的命令支持不同的正则表达式基本正则表达式:BRE扩展正则表达式:EREgre…

    Linux笔记 2018-04-08
  • 特殊权限SGID和sticky配合使用实现文件夹和文件权限的结构化管理

    举例说明特殊权限SGID和sticky配合使用能实现文件夹和文件权限的结构化管理

    2018-04-08
  • LInux系统误将chmod 权限改成了000如何恢复?

    需要解决方法的可直接跳跃至最后“解决方法目”;
    解决方法用到了新学的灵活权限设置 ACL,正文对Linux权限,和ACL用法做了详细解释。

    2018-04-06
  • 编译安装软件

    编译安装httpd软件 1先配置yum源 准备工作:把所有yum源改成本地光盘 [root@centos7 etc]#find *yum*(查找yum配置目录) 1.[root@centos6 ~]#df .[root@centos6 ~]#cd /misc/cd/ (神奇文件自动挂载)光盘 [root@centos7 yum.repos.d]#ls(说明还…

    Linux笔记 2018-04-22