Shell学习记录3

1. 数组

  1. 普通数组:只能使用整数作为数组索引(元素下标)

    定义

    #数组名[索引下标]=值
    array[0]=v1
    array[1]=v2
    array[2]=v3
    #一次赋予多个值
    array=(v1 v2 v3 v4)
    array=(aa bb "cc")
    array=(1 2 3 4 "abc" [10]=lll)
    #将结果赋值给数组
    array1=(`cat /etc/password`)
    array2=(`ls /etc`)
    

    读取

    #${数组名[元素下标]}
    echo ${array[0]}
    echo ${array[*]}
    #打印数组元素个数
    echo ${#array[*]}
    #打印数组元素下标
    echo ${!array[@]}
    #访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素
    echo ${array[@]:1:2}
    #查看普通数组的信息
    declare -a
    
  2. 关联数组:可以使用字符串作为数组索引(下标)

    首先要声明是关联数组

    declare -A array
    

    赋值

    #数组名[下标]=变量值
    array[a]=one
    array[b]=two
    array[c]=three
    #
    array=([a]=one [b]=two [c]=three)
    

    读取同上

2. 其他变量

  • 取出一个目录下的目录和文件:dirname,basename

    A=url(路径)
    #取出目录
    dirname $A
    #取出文件
    basename $A
    
  • 变量“内容”的删除

    • 一个"%"代表从右往左去掉一个/key/
    • 两个"%%"代表从右往左最大去掉/key/
    • 一个"#"代表从左往右去掉一个/key/
    • 两个"#"代表从左往右最大去掉/key/

    实例

    url=www.baidu.com
    #变量的长度
    echo ${#url}
    13
    echo ${url#*.}
    baidu.com
    echo ${url##*.}
    com
    echo ${url%.*}
    www.baidu
    echo ${url%%.*}
    www
    
  • 变量“内容”的替换

    实例

    url=abab
    echo ${url/ab/AB}
    ABab
    url=abab
    echo${url//ab/AB}
    ABAB
    

3. CASE

结构

case var in
pattern 1)
	command1
	;;
pattern 2)
	command2
	;;
pattern 3)
	command3
	;;
		*)			#default
	command4
	;;
esac

实例

#!/bin/bash
var="$1"
echo $var
case $var in
a|A)
    echo 1
;;
b|B)
    echo 2
;;
*)
    echo 3
;;
esac

./a.sh A
1
./a.sh b
2
./a.sh c
3

4. 函数

定义

  1. 函数名()
    {
    	函数体
    }
    
  2. function 函数名()
    {
    	函数体
    }
    

实例

#创建文件
vim a.sh
#!/bin/bash
hello()
{
	echo hello world
}
#读取
source a.sh
hello
hello world

#也可以不用source读取直接在文件中调用
vim a.sh
#!/bin/bash
hello()
{
	echo hello world
}
hello

关于return

return默认返回函数中最后一个命令状态值,也可以给定参数值,范围是0-256

全局

希望自己的函数变成全局的话去修改/etc/bashrc吧

5. 各种符号

  1. & 表示任务在后台执行,加在命令的末尾
  2. && 表示前一条命令执行成功时,才执行后一条命令
  3. | 表示管道,上一条命令的输出,作为下一条命令参数(输入)
  4. || 表示上一条命令执行失败后,才执行下一条命令
  5. >是指:将正常信息重定向
  6. &>可以将错误信息或者普通信息都重定向输出

6. 正则表达式

​ 这里正则表达式主要是用来对字符串进行操作,主要可以实现匹配邮箱,匹配身份证号码,手机号,银行卡号等功能。

字符 描述
\ 建一个字符标记为一个特殊字符,或一个原义字符,比如,”n”匹配字符“n”, “/n”匹配一个换行符,序列”\”匹配”\”而“(”匹配”(“。
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
{n} n是一个非负整数,匹配确定的n次,例如:”o{2}”不能匹配“Bob”种的“o”,但是能匹配“book”种的两个”o”
{n,} n是一个非负整数,至少匹配n次,例如:“o{2,}“不能匹配‘bob’,但可以匹配”foooood“种的所有‘o’, "o{1,}"等价于”o+“,"o{0,}"等价于”o*“
{n,m } m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次,比如“o{1,3}”将匹配“fooooodv”种的前三个o
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
. 匹配除了”\n“之外的任何单个字符,要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
(pattern) 匹配pattern并获取这一匹配的子字符串。该子字符串用户向后引用。要匹配圆括号字符,请使用“(”或“)”。
x竖线y 匹配x或y。 例如”z竖线food“能匹配”z“或”food”.”(z竖线f)oood”则匹配”zood“或”food“。
[xyz] 字符集合(character class)。匹配所包含的任意一个字符。例如,”[abc]“可以匹配”plain“中的”a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符。
[^xyz] 排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

你可能感兴趣的:(Shell学习记录3)