Skip to content

Instantly share code, notes, and snippets.

@wenchy
Last active June 28, 2018 06:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wenchy/c9907f5b8fb8ebeb135ec3cd9fcc1b33 to your computer and use it in GitHub Desktop.
Save wenchy/c9907f5b8fb8ebeb135ec3cd9fcc1b33 to your computer and use it in GitHub Desktop.
CheatSheet

shell变量的子串的删除/替换

${#string} 返回$string的长度

${string:position} 在$string中,从$position位置之后开始提取子串

${string:position:length} 在$string中,从$position位置之后开始提取$length长度的子串

[root@localhost SHELL]# NAME="ni hao, ming tian"
[root@localhost SHELL]# echo $NAME
ni hao, ming tian
[root@localhost SHELL]# echo ${NAME}
ni hao, ming tian
[root@localhost SHELL]# echo ${#NAME}
17
[root@localhost SHELL]# echo ${NAME:3}
hao, ming tian
[root@localhost SHELL]# echo ${NAME:3:6}
hao, m
[root@localhost SHELL]# 

${string#substring} 从变量$string开头开始删除最短匹配$substring子串

${string##substring} 从变量$string开头开始删除最长匹配$sunstring子串

[root@localhost SHELL]# echo $NAME
abcABC123ABCabcde
[root@localhost SHELL]# echo ${NAME#a*C}
123ABCabcde
[root@localhost SHELL]# echo ${NAME##a*C}
abcde
[root@localhost SHELL]# 

${string%substring} 从变量$string结尾开始删除最短匹配$substring子串

${string%%substring} 从变量$string结尾开始删除最长匹配$substring子串

[root@localhost SHELL]# NAME=abcABC123ABCabc
[root@localhost SHELL]# echo $NAME
abcABC123ABCabc
[root@localhost SHELL]# echo ${NAME%%a*c}

[root@localhost SHELL]# echo ${NAME%a*c}
abcABC123ABC
[root@localhost SHELL]# echo ${NAME#b*c}
abcABC123ABCabc
[root@localhost SHELL]# echo ${NAME#bc}
abcABC123ABCabc
[root@localhost SHELL]# echo ${NAME%bc}
abcABC123ABCa
[root@localhost SHELL]# echo ${NAME%%bc}
abcABC123ABCa
[root@localhost SHELL]# echo ${NAME%C*c}
abcABC123AB
[root@localhost SHELL]# echo ${NAME%%C*c}
abcAB
[root@localhost SHELL]# echo ${NAME%%C*b}
abcABC123ABCabc
[root@localhost SHELL]# echo ${NAME}
abcABC123ABCabc
[root@localhost SHELL]# 

注意:在进行#或##匹配时,$string的首字符必须是被删除子串$substring的第一个字符,不然无法匹配删除; 在进行%或者%%匹配时,$string的最后一个字符必须是被删除子串$substring的最后一个字符,不然无法进行删除操作;

${parameter/parttern/string} 用string来替换第一个匹配的pattern

${parameter/#parttern/string} 从开头匹配parameter变量中的pattern,匹配上后就用string来替换匹配的pattern

${parameter/%pattern/string} 从结尾开始匹配parameter变量中的pattern,匹配上后就用string替换匹配的pattern

${parameter//pattern/string} 用string来替换parameter变量中所有匹配的pattern

[root@localhost SHELL]# NAME="I am a student student"
[root@localhost SHELL]# echo ${NAME//student/teacher}
I am a teacher teacher
[root@localhost SHELL]# echo ${NAME/#student/teacher}
I am a student student
[root@localhost SHELL]# echo ${NAME/%student/teacher}
I am a student teacher
[root@localhost SHELL]# echo ${NAME/%I am /teacher}
I am a student student
[root@localhost SHELL]# echo ${NAME/#I am /teacher}
teachera student student
[root@localhost SHELL]# echo ${NAME/#I am a/teacher}
teacher student student
[root@localhost SHELL]# echo $NAME
I am a student student
[root@localhost SHELL]# 

shell 数组遍历的3种方法

首先创建一个数组

  • array=(A B C D 1 2 3 4)
  • IFS=' ' read -a array <<< "A B C D 1 2 3 4"
  1. for
for(( i=0;i<${#array[@]};i++)) do
# ${#array[@]}获取数组长度用于循环
echo ${array[i]};
done;
  1. for in
for i in "${!arr[@]}";   
do   
    printf "%s\t%s\n" "$i" "${arr[$i]}"  
done  
  1. while
i=0  
while [ $i -lt ${#array[@]} ]  
# 当变量(下标)小于数组长度时进入循环体
do  
    echo ${ array[$i] }  
    # 按下标打印数组元素
    let i++  
done  
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment