Shell脚本知识点积累

1.字符串

1.1.截取字符串

1.1.1.获取’='右边的字符串

str="aaaaaaaaaaaaaa=bbbbbbb";
str1=${
    
    str#*=} #匹配第一个,进行截取
echo "new str1=$str1"
str2=${
    
    str##*=} #匹配最后一个,进行截取
echo "new str2=$str2"

1.1.2.获取’='左边的字符串

str="aaaaaaaaa=---cc---";
str1=${
    
    str%cc*}#匹配第一个,进行截取
echo "new str1=$str"
str2=${
    
    str%%cc*} #匹配最后一个,进行截取
echo "new str2=$str"

1.1.3.从左边开始计数

语法:${string: start :length}

test="login.fracong.com"
echo ${
    
    test: 6: 7}

结果:fracong

说明:如果不写length则截取到最后位置。

1.1.4.从右边开始计数

语法:${string: 0-start :length}

test="login.fracong.com"
echo ${
    
    test: 0-11: 7}   #从右边往左数11为开始,然后往右计数获取7位,其中0-为固定写法

结果:fracong

说明:如果不写length则截取到最后位置。

1.2.字符串的大小写转换

使用typeset ,有两个选项 -l 代表小写 -u 代表大写。用法:

typeset -u name
name='asdasdas'
echo $name
 
typeset -l ame
ame='asdasdas'
echo $ame

2.if…elif…else的使用

2.1语法

if [ condition1 ];then      
	#action1...
elif test condition;then
	#action2....
elif [[ condition3 ]];then
	#action3....
else
	#action3...
fi

重点说明*

  1. 中括号内两端必须要有空格
  2. []、test condition二者是等价的,[[]]更加强大。

2.2.条件内部或与运算符

-a表示and; -o表示or; !表示非

TEST="A"
if [ $TEST = "A" -a $TEST = "a" ]; then
 echo "Test A";
else 
 echo "Test Other";
fi

if [ $TEST = "A" -o $TEST = "a" ]; then
 echo "Test A";
else 
 echo "Test Other";
fi

if [ !$TEST = "B" ]; then
 echo "Test A";
else 
 echo "Test Other";
fi

结果为:

Test Other
Test A
Test A

2.3.整数比较

-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于

2.4.逻辑关系

TEST="A"
if [ $TEST = "A" ] && [ $TEST = "a" ]; then   #逻辑与
 echo "Test A";
else 
 echo "Test Other";
fi

if [ $TEST = "A" ] || [ $TEST = "a" ]; then  #逻辑或
 echo "Test A";
else 
 echo "Test Other";
fi

2.5.字符串比较

== 等于  两边要有空格
!= 不等
>  大于
<  小于

2.6.其他特殊测试

-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e file 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z  是否为空  为空则为真
-a  是否不空

3.获取键盘输入

TEST=""
if [ -z "$TEST" ];then            #判断'TEST'的值是否为空值,为空值则为真。
	read -p "Please input your test:" TEST   #获取键盘输入的数据
	echo "Test:$TEST"    #在控制台输出
fi

4.文件的读写

4.1.创建文件

if [ ! -f /home/fracong/test.sh ]; then
  echo create test.sh
  touch /home/fracong/test.sh
fi

4.2.读文件

TEST=""
if [ -f "/home/fracong/test.sh" ];then
  TEST=`grep  "export TEST=" /home/fracong/test.sh`
  TEST=${
    
    TEST#*=}    #获取=号右侧数据
  echo "The test:$TEST"
fi

4.3.写文件(追加)

TEST="AAAAAA"
if [ -Z "$TEST" ];then
	echo "export TEST=$TEST" >>/home/fracong/test.sh
fi

4.4.写文件(替换)

TEST="AAAAAA"
if [ -Z "$TEST" ];then
	sed -i "/^.*TEST=.*$/cexport TEST=$TEST" /home/fracong/test.sh
fi

关于sed的简单说明:

  • -i 直接在原文件上进行修改
  • /^.*TEST=.*$/ 为正则表达式,选择出含有TEST=的行
  • c 取代行,用后面的字符串进行取代

5.退出程序exit

exit 0:正常运行程序并退出程序;
exit 1:非正常运行导致退出程序;
0代表正常推出,非0代表非正常推出。

猜你喜欢

转载自blog.csdn.net/m0_37356874/article/details/107406712