shell脚本之三:shell变量知识进阶与实践

摘要:
/bin/bashforargin“$*”doecho$argdonecho------forarg1 in“$@”doecho$arg1doneecho$#[root@centos6-kvm3scripts]#bashtest.sh“iam”老男孩老师。3[ root@centos6-kvm3scripts]#(2)Shell进程特殊状态变量① $? (3) 外壳变量子串的知识和实践1.获取可变长度[root@centos6-kvm3scripts]#oldboy=“iamordboy”[root@centos6-kvm3scripts]#Echo${oldboy}iamouldboy${#Variable}:获取变量字符数。[ root@centos6-kvm3scripts]#echo${oldboy//oldboy/oldgirl}iamondgirloldgirl[root@centos6-kvm3scripts]#(4)Shell特殊变量扩展知识1.变量临时赋值结果=${变量:-word}:当变量为空时,将word赋值给结果。

三、SHELL变量知识进阶与实践

(一)shell特殊位置变量

1.获取脚本的名字($0)

$0:获取脚本的名字,如果脚本前跟着路径的话,那就获取路径加上脚本名字。
企业应用:一般在脚本最后,使用$0获取脚本的路径和名字给用户。

2、获取脚本的第n个参数($n)

$n:获取脚本后的第n个参数,n大于9以后,数字需要用大括号括起来。
企业应用:脚本中,提取第n个参数。

3、获取脚本的所有参数个数($#)

$#:脚本后所有参数的个数。
企业应用:判断参数个数。

4、获取脚本的所有参数

$*:获取shell脚本中所有的参数。所有单数是一个整体:"$1,$2,$3"
$@:获取脚本的所有参数。每个参数是一个整体:"$1","$2","$3"
当需要接收脚本后所有参数,但是又不知道个数的时候,使用$*,$#
两者区别:
[root@centos6-kvm3 scripts]# cat test.sh
#!/bin/bash
for arg in "$*"
do
 echo $arg
done

echo ------
for arg1 in "$@"
do
  echo $arg1
done

echo $#

[root@centos6-kvm3 scripts]# bash test.sh "i am" oldboy teacher.
i am oldboy teacher.
------
i am
oldboy
teacher.
3
[root@centos6-kvm3 scripts]# 

(二)shell进程特殊状态变量

①$?:获取上一个命令的返回值,返回值为0,表示成功,非0,表示失败。
②$$:获取当前执行脚本的进程号。
③$!:获取上一个后台工作的进程的进程号。
④$_:获取在此前执行命令或者脚本的最后一个参数。

(三)shell变量子串知识及实践(变量内容)

1、获取变量长度

[root@centos6-kvm3 scripts]# oldboy="i am oldboy"
[root@centos6-kvm3 scripts]# echo ${oldboy}
i am oldboy
${#变量}:获取变量字符个数。
[root@centos6-kvm3 scripts]# echo ${#oldboy}
11
[root@centos6-kvm3 scripts]# echo ${oldboy}|wc -L
11
计算变量字符个数方法2:
[root@centos6-kvm3 scripts]# expr length "$oldboy"
11
计算变量字符个数方法3:
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length }'
11
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($0) }'
11
[root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($1) }'
1
获取变量第二个参数后参数:
[root@centos6-kvm3 scripts]# echo ${oldboy:2}
am oldboy
[root@centos6-kvm3 scripts]# echo ${oldboy:2:2}
am
[root@centos6-kvm3 scripts]#

2、匹配变量子串

${参数#字符串}:匹配开头,删除最短匹配。
[root@centos6-kvm3 scripts]# OLDBOY=abcABC12345ABCabc
[root@centos6-kvm3 scripts]# echo ${OLDBOY}
abcABC12345ABCabc
[root@centos6-kvm3 scripts]# echo ${OLDBOY#a*C}
12345ABCabc
${参数##字符串}:匹配开头,删除最长匹配。
[root@centos6-kvm3 scripts]# echo ${OLDBOY##a*C}
abc
${参数%字符串}:匹配结尾,删除最短匹配。
[root@centos6-kvm3 scripts]# echo ${OLDBOY%a*c}
abcABC12345ABC
${参数%%字符串}:匹配结尾,删除最长匹配。
[root@centos6-kvm3 scripts]# echo ${OLDBOY%%a*c}

[root@centos6-kvm3 scripts]# 

3、替换字符串里的子串

${变量/part/string}:使用string替换part第一个匹配项。
[root@centos6-kvm3 scripts]# oldboy="i am oldboy oldboy"
[root@centos6-kvm3 scripts]# echo ${oldboy/oldboy/oldgirl}
i am oldgirl oldboy
${变量//part/string}:使用string替换part所有匹配项。
[root@centos6-kvm3 scripts]# echo ${oldboy//oldboy/oldgirl}
i am oldgirl oldgirl
[root@centos6-kvm3 scripts]# 

(四)shell特殊变量扩展知识

1、变量临时赋值

result=${变量:-word}:当变量为空时候,将word赋值给result。冒号可以省略。
[root@centos6-kvm3 scripts]# result=${test:-UNSET}
[root@centos6-kvm3 scripts]# echo $result
UNSET
[root@centos6-kvm3 scripts]# echo $test
企业应用:
[root@centos6-kvm3 scripts]# find ${path:-/tmp} -name  "*.log" -mtime +7| xargs rm -f
[root@centos6-kvm3 scripts]#

2、变量赋值

result=${变量:=word},变量为空时候,work复制给result,同时复制给变量。
[root@centos6-kvm3 scripts]# result=${test:=UNSET}
[root@centos6-kvm3 scripts]# echo ${result}
UNSET
[root@centos6-kvm3 scripts]# echo ${test}
UNSET
[root@centos6-kvm3 scripts]# 

3、变量赋值提示

${变量:?word}:当变量为空时候,提示word。

[root@centos6-kvm3 scripts]# result=${test1:?变量为空}
-bash: test1: 变量为空
[root@centos6-kvm3 scripts]# echo $result
UNSET
[root@centos6-kvm3 scripts]# echo $test1

[root@centos6-kvm3 scripts]# test1=oldboy
[root@centos6-kvm3 scripts]# result=${test1:?变量为空}
[root@centos6-kvm3 scripts]# echo $result
oldboy
[root@centos6-kvm3 scripts]#

4、变量赋值覆盖

${变量:+word}:如果前面变量为空,什么不做,如果不为空,进行覆盖。
[root@centos6-kvm3 scripts]# result1=${test2:+wordk}
[root@centos6-kvm3 scripts]# echo ${result1}

[root@centos6-kvm3 scripts]# echo ${test2}

[root@centos6-kvm3 scripts]# test2=2
[root@centos6-kvm3 scripts]# result1=${test2:+wordk}
[root@centos6-kvm3 scripts]# echo ${result1}
wordk
[root@centos6-kvm3 scripts]# echo ${test2}
2
[root@centos6-kvm3 scripts]# 

免责声明:文章转载自《shell脚本之三:shell变量知识进阶与实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TS学习笔记--其他(声明文件、内置对象)python:动态参数*args下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

四、使用ADB命令清除缓存

一、ADB Shell 应用 查看目录结构 :adb shell ls 查看系统当前日期 :adb shell date 查看系统 CPU 使用情况 :adb shell cat /proc/cpuinfo 查看系统内存使用情况 :adb shell cat /proc/meminfo 显示所有应用 :adb shell pm list pack...

IVR交互式语音应答系统

ZingServ平台IVR子系统介绍 IVR系统的中文译名为"交互式语音应答系统",然而,真正的IVR系统早已超出这种中文译名所描述的功能范围--IVR是一种功能强大的电话自动服务系统。对用户来说,只有理解了这一点,才能真正了解IVR系统的价值;而对产品提供商来说,也只有理解了这一点,才能真正明确产品的应用范围和设计目标。  在ZingServ一体化呼叫中...

2.变量

变量 变量的组成 变量的组成分为以下三个部分: 变量名:变量名用来引用变量值,但凡需要用变量值,都需要通过变量名。 赋值符号:赋值 变量值:存放数据,用来记录现实世界中的某种状态。 变量的命名应该满足以下三个规范: 变量的命名应该能反映变量值所描述的状态,切记不可用中文 变量名必须用字母数字下划线组合,并且变量名的第一个字符不能是数字。 关键字不能声...

ASP.NET 全局变量和页面间传值方法

http://www.cnblogs.com/dgjack/archive/2011/05/28/2060913.html 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。 如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不...

[Android]Android的常用adb命令

第一部分: 1. ubuntu下配置环境anroid变量: 在终端执行sudo gedit /etc/profile 打开文本编辑器,在最后追加#set android environment 2. 运行Eclipse,还需要配置JAVA环境变量 #set java environment JAVA_HOME=/home/loginname/jdk目录名...

Python编程:从入门到实践(选记)

本文参考《Python 编程:从入门到实践》一书,作者:[ 美 ] Eric Matthes 第1章 起步 1.1 搭建python环境 在不同的操作系统中, Python 存在细微的差别。 1.1.1 Python 2和Python 3 在本书中,将指出 Python 2 和 Python 3 的重大差别。1.1.2 运行Python代码片段 1.1....