• Linux Bash Shell学习笔记


    参数扩展:


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

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

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

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

    间接参数扩展:

    1 $ PARAMETER=TEMP
    2 $ TEMP="It's indirect"
    3 $ echo $PARAMETER
    4   TEMP
    5 $ echo ${!PARAMETER}
    6 it's indirec

    大小写修改(Bash4.0):

     1 $ echo ${PARAMETER^}
     2 #将参数的第一个字符改为大写
     3 $ echo ${PARAMETER^^}
     4 #将参数的全部字符改为大写
     5 $ echo ${PARAMETER,}
     6 #将参数的第一个字符改为小写
     7 $ echo ${PARAMETER,,}
     8 #将参数的全部字符改为小写
     9 $ echo ${PARANETER~}
    10 #将参数的第一个字符改为大写
    11 $ echo ${PARANETER~~}
    12 #将参数的全部字符改为大写

    大小写修改实例:

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

    变量名扩展:

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

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

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

    字符串移除:

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

    字符串移除实例:

     1 $ MYSTRING="This is used for removing string"
     2 $ echo ${MYSTRING#* }
     3 is used for removing string
     4 
     5 $echo ${MYSTRING##* }
     6 string
     7 
     8 $echo ${MYSTRING% *}
     9 This is used for removing
    10 
    11 $echo ${MYSTRING%% *}
    12 This

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

     1 $ FILENAME=linux_bash.txt
     2 
     3 $ echo ${FILENAME%.*}                       #移除文件名的后缀
     4 linux_bash
     5 
     6 $ echo ${FILENAME##*.}                     #移除文件名,保留后缀
     7 txt 
     8 
     9 FILENAME=/home/book/linux_bash.txt
    10 
    11 $ echo ${FILENAME%/*}                      #移除文件名,保留目录名
    12 /home/book
    13 
    14 $ echo ${FILENAME##*/}                    #移除目录名,保留文件名
    15 linux_bash.txt

    字符串的搜索与替换:

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

     例:

     1 $ MYSTRING="This is used for replacing string or removing string"
     2 $ echo ${MYSTRING/string/characters}
     3 This is used for replacing characters or removing string
     4 
     5 $ echo ${MYSTRING//string/characters}
     6 This is used for replacing characters or removing characters
     7 
     8 $ echo ${MYSTRING/string }
     9 This is used for replacing or removing string
    10 
    11 $ echo ${MYSTRING//string }
    12 This is used for replacing or removing string
    13 
    14 $ echo ${MYSTRING//string/ }
    15 This is used for replacing or removing

     求字符串的长度:

    1 $ echo ${#PARAMETER}

     得到参数值的长度:

    1 $ MYSTRING="Hello World"
    2 $ echo ${#MYSTRING}
    3 11

     子字符串扩展:

    1 $ {PARAMETER:OFFSET
    2 $ {PARAMETER:OFFSET:LENGTH}

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

    不指定长度:

    1 $ MYSTRING="This is used for substring expansion."
    2 
    3 $ echo ${MYSTRING:8}
    4 used for substring expansion.

     指定长度:

    1 $ echo ${MYSTRING:8:10}
    2 used for s

     使用默认值:

    1 ${PARAMTER:-WORD}
    2 ${PARAMTER-WORD}

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

     1 $ unset MYSTRING
     2 
     3 $ echo $MYSTRING
     4 
     5 $ echo ${MYSTRING:-Hello World}
     6 Hello World
     7 $ echo MYSTRING
     8 
     9 $ MYSTRING=HI
    10 $ echo ${MYSTRING}:-Hello World
    11 HI

     指定默认值:

    1 ${PARAMETER:=WORD}
    2 ${PARAMETER=WORD}

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

    例:

    1 $ unset MYSTRING
    2 $ echo $MYSTRING
    3 
    4 $ echo ${MYSTRING:=Hello World}
    5 Hello World
    6 
    7 $ echo $MYSTRING
    8 Hello World

    使用替代值:

    1 ${PARAMTER:+WORD}
    2 ${PARAMTER+WORD}
    #如果参数PARAMTER是未定义的,或者其值未空时,这种模式将不扩展任何参数。如果参数PARAMTER是定义的,且其值不为空,这种模式会扩展WORD,而不是扩展PARAMTER的值。
    1 $ MYSTRING=""
    2 
    3 $ echo ${MYSTRING:+MOTE:MYSTRING seems to be set.}
    4 
    5 $ MYSTRING="HI"
    6 echo ${MYSTRING:+NOTE:MYSTRING seems to be set.}
    7 NOTE:MYSTRING seems to be set
  • 相关阅读:
    hdu 1251(字典树)(3种方法)
    HDU 2203(KMP算法)
    九度oj 题目1335:闯迷宫
    poj3894 bfs+记录路径
    状压dp--P2704
    状压dp--洛谷P2622
    动态规划--牛客多校number
    完全背包
    01背包--hdu
    莫比乌斯反演模板--Gym 101982B
  • 原文地址:https://www.cnblogs.com/yuanshaoqian/p/5831646.html
Copyright © 2020-2023  润新知