Shell脚本-基础

一、变量

1.命名规范

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  • 中间不能有空格,可以使用下划线(_)。

  • 不能使用标点符号。

  • 不能使用bash里的关键字(可用help命令查看保留关键字)

2.使用变量

your_name="qinjx"
echo $your_name
echo ${your_name}

二、字符串

1.单引号

任何字符都会原样输出,单引号字符串中的变量是无效的;

不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

str='this is a string'

2.双引号

双引号里可以有变量

双引号里可以出现转义字符

your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

3.拼接字符串

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

4.获取字符串长度

string="abcd"
#输出 4
echo ${#string} 

5.提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

string="runoob is a great site"
# 输出 unoo
echo ${string:1:4} 

三、数组

bash支持一维数组,不支持多维数组,并且没有限定数组的大小。

1.定义数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

2.读取数组

# n某个具体的
valuen=${array_name[n]}
# @符号可以获取数组中的所有元素
echo ${array_name[@]}

3.获取数组的长度

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

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

四、传递参数

执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";

image

$ 与 $@ 区别:*

相同点:都是引用所有参数。

不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)

五、比较

数值比较

image

代码

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

字符串比较

image

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

文件比较

image

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

Shell 还提供了与( -a )、或( -o )、非( ! ),优先级为: ! 最高, -a 次之, -o 最低

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '至少有一个文件存在!'
else
    echo '两个文件都不存在'
fi

六、流程控制

if

if condition
then
command1 
fi

写成一行

if condition;then command1;fi

if else

if condition
then
    command1 
else
    command2
fi

for

in 列表可以包含替换、字符串和文件名

for var in item1 item2 ... itemN
do
command1
done

写成一行

for var in item1 item2 ... itemN; do command1; command2… done;
posted @ 2021-09-12 08:25  难删亦删  阅读(55)  评论(0)    收藏  举报