shell脚本知识点

-2 shell中的算术运算

*这是因为,在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

第一种:. 

 

 

-1. 获取变量的类型

 

第一种:. 

 

 

0. 获取字符串长度
第一种:.  name=Alex
                  echo ${#name}

第二种:echo "abc" |wc -L

第三种:echo "abc" |awk -F "" '{print NF}'

第四种:echo “Alex”|awk '{print length($0)}'

二、字符串操作(长度,读取,替换)

表达式含义
${#string} $string的长度
   
${string:position} 在$string中, 从位置$position开始提取子串
${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串
   
${string#substring} 从变量$string的开头, 删除最短匹配$substring的子串
${string##substring} 从变量$string的开头, 删除最长匹配$substring的子串
${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串
   
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
   

 

 

1. 比较两个带空格的字符串是否相等:条件用[[ ]]括起来,若是不带空格的两个字符串,就[ ]就行。

n='Docker version 1.13.1, build 0be3e21/1.13.1'
m='Docker version 1.13.1, build 0be3e21/1.13.1'

if [[ $m = $n ]];then
echo "success"
else
echo "fail"
fi

-------------------------------------
n='Docker'
m='Docker'

if [ $m = $n ];then
echo "success"
else
echo "fail"
fi
或者
n='Docker'
m='Docker'

if test $m = $n
then
echo "success"
else
echo "fail"
fi

2. shell脚本判断docker是否安装
docker -v
返回:Docker version 1.13.1, build 0be3e21/1.13.1
d='Docker version'
res=$(docker -v)
if [[ $d = ${res:0:14} ]];then
echo "*******************docker exist*******************"
else
echo "**************install docker**********************"
yum -y install docker
fi


3. 判断文件夹不存在,然后创建
if [ ! -d "jenkins" ]; then
mkdir jenkins
fi

4. 判断变量的长度
m="rong"
echo ${#m}
返回:4

5.shell字符串截取

Shell脚本8种字符串截取方法总结

Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://www.aaa.com/123.htm.
1. # 号截取,删除左边字符,保留右边字符。
代码如下:

echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
代码如下:

echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
代码如下:

echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
代码如下:

echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
代码如下:

echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
代码如下:

echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
代码如下:

echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
代码如下:

echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)



参考资料:https://www.cnblogs.com/DreamDrive/p/7706585.html
https://blog.51cto.com/14142757/2414157
https://www.cnblogs.com/ralphdc/p/8032335.html

Shell中判断文件,目录是否存在

 

一. 具体每个选项对应的判断内容:

复制代码
-e filename 如果 filename存在,则为真 
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真 
-L filename 如果 filename为符号链接,则为真 
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真 
-s filename 如果文件长度不为0,则为真 
-h filename 如果文件是软链接,则为真
复制代码

 

二.常用的例子:

1.判断文件夹是否存在

复制代码
#shell判断文件夹是否存在

#如果文件夹不存在,创建文件夹
if [ ! -d "/myfolder" ]; then
  mkdir /myfolder
fi
复制代码

 

2.判断文件夹是否存在并且是否具有可执行权限

复制代码
#shell判断文件,目录是否存在或者具有权限
folder="/var/www/"
file="/var/www/log"

# -x 参数判断 $folder 是否存在并且是否具有可执行权限
if [ ! -x "$folder"]; then
  mkdir "$folder"
fi
复制代码

 

3.判断文件夹是否存在

# -d 参数判断 $folder 是否存在
if [ ! -d "$folder"]; then
  mkdir "$folder"
fi

 

4.判断文件是否存在

# -f 参数判断 $file 是否存在
if [ ! -f "$file" ]; then
  touch "$file"
fi

 

5.判断一个变量是否有值

# -n 判断一个变量是否有值
if [ ! -n "$var" ]; then
  echo "$var is empty"
  exit 0
fi

 

6.判断两个变量是否相等.

复制代码
# 判断两个变量是否相等
if [ "$var1" = "$var2" ]; then
  echo '$var1 eq $var2'
else
  echo '$var1 not eq $var2'
fi
复制代码

 

posted @ 2021-01-15 11:36  yoyoma0355  阅读(124)  评论(0编辑  收藏  举报