参数扩展:

1.被名称引用的参数称作变量
2.被数字引用的参数称作位置参数
3.被特定符号引用的参数具有特殊的含义和用途,被称作Bash的特殊内部变量引用。

基本参数扩展:
字符$会引导参数扩展。大括号是可选的,但是大括号可以保护待扩展的变量,使得紧跟大括号后面的内容不会被扩展。
例:

 $ PARAMETER
$ {PARAMETER}
#如果参数名后跟其他字符,大括号是必须的。 $ WORD=car
$ echo $WORDs
$ echo ${WORD}s
cars

对于$9后面的参数也是要用大括号的。
注意:参数名是大小写敏感的。

间接参数扩展:

 $ PARAMETER=TEMP
$ TEMP="It's indirect"
$ echo $PARAMETER
TEMP
$ echo ${!PARAMETER}
it's indirec

大小写修改(Bash4.0):

 $ echo ${PARAMETER^}
#将参数的第一个字符改为大写
$ echo ${PARAMETER^^}
#将参数的全部字符改为大写
$ echo ${PARAMETER,}
#将参数的第一个字符改为小写
$ echo ${PARAMETER,,}
#将参数的全部字符改为小写
$ echo ${PARANETER~}
#将参数的第一个字符改为大写
$ echo ${PARANETER~~}
#将参数的全部字符改为大写

大小写修改实例:

 # for file in *.txt
>do
>mv "$file" "${file,,}"
>done

变量名扩展:

 ${!PREFIX*}
${!PREFIX@}
#列出以字符串PREFI开头的所有变量名

例:列出以BASH开头的所有变量名

 $echo ${!BASH*}
BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

字符串移除:

 ${PARAMETER#PATTERN}
${PARAMETER##PATTERN}
#移除从参数值的开头匹配指定模式的字符串
${PARAMETER%PATTERN}
${PARAMETER%%PATTERN}
#移除从参数值的结尾匹配指定模式的字符串
#”#“和”%“表示移除匹配指定模式的最短文本,”##“和”%%“表示移除匹配模式的最长文本。

字符串移除实例:

 $ MYSTRING="This is used for removing string"
$ echo ${MYSTRING#* }
is used for removing string $echo ${MYSTRING##* }
string $echo ${MYSTRING% *}
This is used for removing $echo ${MYSTRING%% *}
This

参数用途,提取文件名的一部分:

 $ FILENAME=linux_bash.txt

 $ echo ${FILENAME%.*}                       #移除文件名的后缀
linux_bash $ echo ${FILENAME##*.} #移除文件名,保留后缀
txt FILENAME=/home/book/linux_bash.txt $ echo ${FILENAME%/*} #移除文件名,保留目录名
/home/book $ echo ${FILENAME##*/} #移除目录名,保留文件名
linux_bash.txt

字符串的搜索与替换:

 $ {PARAMETER/PATTERN/STRING}
$ {PARAMETER//PATTERN/STRING}
$ {PARAMETER/PATTERN}
$ {PARAMETER//PATTERN}
#操作符“/”和“//”分别表示只替换一个匹配的字符串和替换全部匹配的字符串,如果没有指定替换的字符串STRING,那即是替换为空,即删除。

例:

 $ MYSTRING="This is used for replacing string or removing string"
$ echo ${MYSTRING/string/characters}
This is used for replacing characters or removing string $ echo ${MYSTRING//string/characters}
This is used for replacing characters or removing characters $ echo ${MYSTRING/string }
This is used for replacing or removing string $ echo ${MYSTRING//string }
This is used for replacing or removing string $ echo ${MYSTRING//string/ }
This is used for replacing or removing

求字符串的长度:

 $ echo ${#PARAMETER}

得到参数值的长度:

 $ MYSTRING="Hello World"
$ echo ${#MYSTRING}

子字符串扩展:

 $ {PARAMETER:OFFSET
$ {PARAMETER:OFFSET:LENGTH}

从指定的位置开始截取指定长度的字符串;如果不指定截取的字符串长度,将会截取至末尾。

不指定长度:

 $ MYSTRING="This is used for substring expansion."

 $ echo ${MYSTRING:}
used for substring expansion.

指定长度:

 $ echo ${MYSTRING::}
used for s

使用默认值:

 ${PARAMTER:-WORD}
${PARAMTER-WORD}

如果参数PARAMTER未定义或者为NULL时,这种模式或扩展WORD,否则会扩展参数PARAMTER;如果在PARAMTER和WORD之间未使用”:“时,只有参数PARAMTER未定义时,才会使用WORD。

 $ unset MYSTRING

 $ echo $MYSTRING

 $ echo ${MYSTRING:-Hello World}
Hello World
$ echo MYSTRING $ MYSTRING=HI
$ echo ${MYSTRING}:-Hello World
HI

指定默认值:

 ${PARAMETER:=WORD}
${PARAMETER=WORD}

此种模式和使用默认值的区别在于,不仅扩展WORD,还将WORD的值赋值给参数PARAMTER,作为PARAMTER的值。

例:

 $ unset MYSTRING
$ echo $MYSTRING $ echo ${MYSTRING:=Hello World}
Hello World $ echo $MYSTRING
Hello World

使用替代值:

 ${PARAMTER:+WORD}
${PARAMTER+WORD}
#如果参数PARAMTER是未定义的,或者其值未空时,这种模式将不扩展任何参数。如果参数PARAMTER是定义的,且其值不为空,这种模式会扩展WORD,而不是扩展PARAMTER的值。
 $ MYSTRING=""

 $ echo ${MYSTRING:+MOTE:MYSTRING seems to be set.}

 $ MYSTRING="HI"
echo ${MYSTRING:+NOTE:MYSTRING seems to be set.}
NOTE:MYSTRING seems to be set

Linux Bash Shell学习笔记的更多相关文章

  1. Linux下Bash shell学习笔记

    原文地址: http://www.cnblogs.com/NickQ/p/8870423.html 1.shell下没有变量类型和定义的概念. 变量直接使用不用定义 所有值都视为字符串. 在对变量取值 ...

  2. bash shell学习笔记(一)—— 常用命令

    一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ ma ...

  3. 【Linux】Shell学习笔记之四——文件和目录管理(硬连接和软连接)

    在这节将要学习linux的连接档,在之前用"ls -l" 查看文件属性的命令时, 其中第二个属性是连接数.那么这个连接数是干什么的?这就要理解inode. 先说一下文件是怎么存储的 ...

  4. linux的shell学习笔记

    shell脚本第一行写明解释器的路径: #!/bin/bash运行脚本两种方式:使用bash命令运行shell文件,或授予脚本文件执行权限,可直接执行文件shell启动时,一开始执行一组命令来定义提问 ...

  5. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  6. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  7. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  8. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  9. shell 学习笔记2-shell-test

    一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...

随机推荐

  1. Classifier4J的中文支持

    Classifier4J是一个轻量级的分类工具,支持贝叶斯分类.向量空间模型.信息摘要等.然而它却不支持中文,异常信息大致如下: Exception in thread "main" ...

  2. 编译ffmpeg(iOS)

    一,x264库的编译 首先到http://www.videolan.org/developers/x264.html下载x264的库,然后解压,修改文件夹名称为x264     二,下载ffmpeg2 ...

  3. CentOS6 下Vim安装和配置

    1.系统只安装了vim-minimal,执行以下命令安装另外两个组件 yum install vim-common yum install vim-enhanced 2.安装ctags yum ins ...

  4. Flex XML

    一.创建XML类 1.把字符串对象转换为XML: var xmlStr:String="<students><student><name>吕布</n ...

  5. HTML第七天学习笔记

    今天主要是学习如何使用JS,第一个就是先是使用JS输出"Hello world" <!doctype html> <html lang="en" ...

  6. 我的javascript学习之路(一)对象之基础

    做了2个多月的ajax项目,对js的学习觉得了深入了不少,把自己的一些学习的经验贴出来,希望对初学者有所帮助,也希望大家能指出我的错误之处或者不当之处. javascript 是基于对象的语言,为什么 ...

  7. Codeforces Beta Round #75 (Div. 1 Only) B. Queue 线段树+二分

    B. Queue Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/problem/91/B Descrip ...

  8. 浅析C#基于TCP协议的SCOKET通信

    TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实 ...

  9. C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

       功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

  10. Objective-C的对象模型和runtime机制

    内容列表 对象模型(结构定义,类对象.元类和实例对象的关系) 消息传递和转发机制 runtime系统功能理解 对象模型 结构定义 对象(Object): OC中基本构造单元 (building blo ...