shell脚本学习

244 阅读1分钟

先上测试代码跟效果图

#创建变量
my_name="jack"
you_name='java'
qwer="注释"
my_age="20岁"
you_age="30岁"


#使用变量
echo ${my_name}
echo $you_name

#以“#”开头的行就是注释,会被解释器忽略
#echo ${qwer}


#字符串
#单引号字符串的限制:
#       单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
#       单引号字串中不能出现单引号(对单引号使用转义符后也不行
#双引号:
#       双引号里可以有变量
#       双引号里可以出现转义字符

echo "${my_name} 我的天啊"
echo '${my_name} 我的地呀'

#拼接字符串
echo $my_name $my_age
echo $my_name$my_age

#获取字符串长度
echo ${#my_name}

#截取字符串
echo ${my_name:0:2}

image.png

这是到字符串操作的代码及截图 后面还有

变量

定义变量

my_name="jack"
my_name='jack'

ps: 变量名和等号之间不能有空格,变量后面不能有;

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行 双引号字符串的限制:
  • 双引号里可以有变量
  • 双引号里可以出现转义字符 但是在Python中单引号和双引号是没有区别,但是Python 还有三个引号,在三个引号内字符都不会被转义

使用变量

对于已经定义过的变量,使用的适合在前面添加$

echo $my_name
echo ${my_name}

变量名外面的花括号是可选的,加不加都行,建议使用第二种形式

注释

  • 以“#”开头的行就是注释,会被解释器忽略。
  • 多行注释
  • sh里没有多行注释,只能每一行加一个#号。就像这样:
#--------------------------------------------# 
#xxxx:  xxx
#xxx: xxx
#xxxxxxxxxxxxx:
#       xxxxxxxx
#--------------------------------------------

字符串操作

拼接字符串

my_name="jack";
my_age="20岁"
echo \$my_name $my_age
echo \$my_name$my_age

获取字符串长度

echo ${#my_name}

截取字符串

echo ${my_name:0:2}

Shell 数组

定义数组

在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为: name=(name1 name2 name3) 还可以单独定义数组的各个分量:

ary[0]=name1
ary[1]=name2
ary[3]=name3

ps: 可以不使用连续的下标,而且下标的范围没有限制

读取数组

读取数组元素值的一般格式是:

${数组名[下标]}

例如:

echo ${name[0]}

使用@符号可以获取数组中的所有元素,例如:

echo ${name[@]}

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

取得数组元素的个数

length=${#name[@]}
echo $length

或者

length=${#name[*]}
echo $length

取得数组单个元素的长度

lengthn=${#name[n]}
echo $length

Shell 流程控制

和Java、PHP、Python等语言不一样,sh的流程控制不可为空,如(以下为java流程控制写法):

        int a=101;
        if (a<60){
            System.out.println("不及格");
        }else if (a<80){
            System.out.println("良");
        }else if(a<=100){
            System.out.println("优秀");
        }else {
            //什么都不干
        }

image.png

在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else

例子:

#!/usr/bin/env bash
a=1
b=2
if [ $a == $b ]
    then
        echo "a 等于 b"
 elif [ $a -gt $b ]
    then
        echo "a 大于 b"
 elif [ $a -lt $b ]
    then
        echo "a 小于 b"
 else
    echo "没有符合的条件"
 fi

for 循环

Shell的for循环和Python 有点类似

Python的for循环

for index in 1,2,3,4,5:
    print(index);

Shell的for循环,第一种写法

for index in 1 2 3 4 5; do
echo "index="$index
done

Shell的for循环,第二种写法

for ((i=0; i<5; i++)); do
echo "i="$i
done

while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。

int=1while(( $int<=5 ))do
    echo $int
let "int++"
done