shell脚本学习第四天——bash内部变量,变量主串,变量替换

一、bash内部变量:

常见的内部命令:echo,eval,exec,export,readonly,read,shift ,wait,exit和点(.)也就是source命令。

命令作用
echo 变量名将变量名表指定的变量显示到标准输出
eval读取一连串的参数,然后再依参数本身的特性来执行
exec命令参数当Shell执行到exec语句时,不会去创建新的子进程,而是转去执行新的命令,当指定的命令执行完时,该进程(也就是当初的Shell)就终止了,所以Shell程序中的exec后面的语句将不再被执行
export 变量名=valueShell 可以用export把它的变量向下打入子Shell,从而让子进程继承父进程中的环境变量,但子Shell不能用export把他的变量向上带入父Shell
readonly 变量名从标准输入读字符串,传给指定变量
shift使变量位置发生偏移,即 $2成为$1,$3成为$2,每执行一次$#-1

1、eval:

一个eval只能使shell对参数多一次处理,因此有几个eval就可以多加几次。
这里写图片描述

2、shift

这里写图片描述

3、readonly

这里写图片描述

4、exec

执行完后直接退出系统。
这里写图片描述


二、变量主串:

这里写图片描述

export name="i am yangni"
echo ${#name}
echo ${name:2}
echo ${name:2:3}
echo ${name#i am}
echo ${name%ni}
echo ${name/yang/chun}

这里写图片描述

应用实例:

批量修改文件名

for  f  in ` ls *.c`    //设置f的值
do
     mv $f  `echo ${f/yangni/qicheng}`
done

这里写图片描述

当然还有更简单的方法,那就是rename
这里写图片描述

rename xxx yyy *.c :把所有含字符串xxx的.c文件,xxx改为yyy

这里写图片描述


三、变量替换:

1、${value:-word} 判断变量是否定义

result=${test : -UNSET} :如果变量test定义了,显示test内容。如果test未定义,打印UNSET(一个字符串)

//test未定义:
[yangni@centos6 abc]$ result=${test:=UNSET}
[yangni@centos6 abc]$ echo $result
UNSET

//test定义:
[yangni@centos6 abc]$ test=3
[yangni@centos6 abc]$ result=${test:=UNSET}
[yangni@centos6 abc]$ echo $result
3

2、${value:word} 若变量value未定义,将word赋值给value,确保变量始终有值。

result=${test :=UNSET} :变量未定义,将字符串UNSET赋值给test

[yangni@centos6 abc]$ unset test
[yangni@centos6 abc]$ result=${test:=UNSET}
[yangni@centos6 abc]$ echo $test     //test未定义,将UNSET赋值给它      
UNSET    

这里写图片描述

${value-word}类似于2,变量value不存在用word替代。

1./etc/init.d/httpd
2./etc/init.d/crond
3.对变量的路径操作最好先判断是否为空,特别是删除操作:
path =/server/backup
find ${path:= /tmp} -name “*.tat.gz” -type f |xargs rm -f
rm -fr ${path:= /tmp} //删除路径

每日编程练习:

#!/bin/sh 
result=1
while [ $# -gt 0 ]
do
   result=`expr $result \* $1`
   shift
done
  echo $result

用shift实现所有参数的乘积。注意,乘号要用转义字符转义,不然会报错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值