shell变量及变量子串

  • 2019-09-02
  • 0
  • 0

1、重要的特殊位置变量

$0      获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,结果也包含路径

$n      获取脚本的第n个参数,n=1,n=2,若n>9,则需要{}如:${10}

$#      获取当前执行shell脚本后面接的参数的个数

$$      获取当前执行shell进程的进程号(PID)

$@      脚本的所有的传参的参数 如果不加双引号则和$*相同加上双引号则把所有参数视为独立的参数
        $* 和$@ 正常情况下一样  循环体内不同
    
$?      获取上一条命令的结果 0为成功 非0 失败  重要  
 
$$      获取脚本的PID:
        服务器运行大量的名称相同的脚本
        echo $$ > /tmp/count.pid
        
$!      上一个在后台运行脚本的PID 调试使用

$_      获取脚本的最后一个参数 相当于ESC .

2、shell变量子串

ID 表达式 说明
1 ${name} 返回变量$name的内容
2 ${#name} 返回变量$name内容的长度(按字符),也适用于特殊变量
3 ${name:id} 在变量name中,从位置id之后开始提取子串到结尾
4 ${name:id:length} 在变量{name}中,从位置id之后开始提取长度为length的子串
5 ${name#word} 从变量${name}开头开始删除最短匹配word子串
6 ${name##word} 从变量${name}开头开始删除最长匹配word子串
7 ${name%word} 从变量${name}结尾开始删除最短匹配word子串
8 ${name%%word} 从变量${name}结尾开始删除最长匹配word子串
9 ${name/word/id} 使用id代替第一个匹配的word
10 ${name//word/id} 使用id代替所有配的word

2.1、shell变量子串示例

2.1.1、准备

[root@shell ~]# name='good good study,day day up!'
[root@shell ~]# echo $name
good good study,day day up!

2.1.2、统计字符串长度

# 方法一
[root@shell ~]# echo ${#name}
27

# 方法二
[root@shell ~]# echo $name |wc -L
27

# 方法三
[root@shell ~]# expr length "$name"
27

# 方法四
[root@shell ~]# echo $name | awk '{print length}'    
27

2.1.3、实践:打印以下语句字符数小于4的单词。

good good study,day day up!

# 方法一:
[root@shell scripts]# cat for.sh 
#!/bin/bash
for i in good good study , day day up !
do
[ ${#i} -lt 4 ] && echo $i
done

# 方法二
[root@shell scripts]# echo good good study , day day up ! |xargs -n1|awk '{if(length<4)print}'
,
day
day
up
!

# 方法三
[root@shell scripts]#  echo good good study , day day up ! |awk '{for(i=1;i<=NF;i++)if(length($i)<4)print $i}' 
,
day
day
up
!

2.1.4 变量的删除和替换

# 从前往后删除变量内容
[root@shell scripts]# echo $url
www.sina.com.cn
[root@shell scripts]# echo ${url#*.}
sina.com.cn
[root@shell scripts]# echo ${url#*.*.}
com.cn
[root@shell scripts]# echo ${url##*.}
cn

# 从后往前删除变量内容
[root@shell scripts]# echo $url
www.sina.com.cn
[root@shell scripts]# echo ${url%.*}
www.sina.com
[root@shell scripts]# echo ${url%%.*}
www

# 变量的替换
[root@shell scripts]# echo $url
www.sina.com.cn
[root@shell scripts]# echo ${url/w/a}
aww.sina.com.cn
[root@shell scripts]# echo ${url/w/aa}
aaww.sina.com.cn
[root@shell scripts]# echo ${url/w/a}
aww.sina.com.cn
[root@shell scripts]# echo ${url//w/a}
aaa.sina.com.cn
[root@shell scripts]# echo ${url/sina/baidu}
www.baidu.com.cn

评论

还没有任何评论,你来说两句吧

提供支持 - 友情链接 - 衫小寨