Shell脚本语言基础

2023-11-19 23:11:33 浏览数 (1)

Shell脚本语言基础

1 基本介绍

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

2 Hello World

2.1 文件命名和头部标识、执行方式

文件命名:一般以xx.sh为shell脚本文件的名称

头部标识:一般在文件内容的第一行加入#!/bin/bash

执行方式:一般使用命令./xx.sh执行shell脚本文件

2.2 编写HelloWorld
代码语言:shell复制
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo touch hello.sh
ymx@ymx-PC:~/Desktop/files/shellTest$ ls
hello.sh
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo vim hello.sh 
###########文件内容##############
#!/bin/bash

echo Hello World!

###########文件内容结束##############
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo chmod 777 hello.sh 
ymx@ymx-PC:~/Desktop/files/shellTest$ ./hello.sh 
Hello World!

3 引入变量

3.1 定义变量

变量名 = 变量值

例如:str = "Hello Shell"

注意:等号两边不能加空格

3.2 使用变量

操作命令 $变量名

例如:echo $str

3.3 示例
代码语言:shell复制
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo touch args1.sh
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo chmod 777 args1.sh 
ymx@ymx-PC:~/Desktop/files/shellTest$ vim args1.sh 
##########写入内容##########
#!/bin/bash

str="Hello Shell"

echo $str

##########写入内容结束##########
ymx@ymx-PC:~/Desktop/files/shellTest$ ./args1.sh 
Hello Shell

4 参数使用

4.1 参数接收

$0表示所执行的文件名

$1表示接收的第一个参数

$2表示接收的第二个参数

......

4.2 基本使用
代码语言:shell复制
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo touch args2.sh
ymx@ymx-PC:~/Desktop/files/shellTest$ sudo chmod 777 args2.sh 
ymx@ymx-PC:~/Desktop/files/shellTest$ vim args2.sh 
##########开始写入#########
#!/bin/bash 

echo "执行文件名为$0"

echo "第一个输入参数为$1"

echo "第二个输入参数为$2"

##########写入结束#########
ymx@ymx-PC:~/Desktop/files/shellTest$ ./args2.sh 1 2 
执行文件名为./args2.sh
第一个输入参数为1
第二个输入参数为2
4.3 几个特殊参数

参数处理

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

5 Shell数组

5.1 定义数组

方式一:

代码语言:shell复制
array_1=(1 2 3 4 5)

方式二:

代码语言:shell复制
array_2[0]=21
array_2[1]=22
array_2[2]=23
array_2[3]=24
array_2[4]=25

注:shell只有一维数组

5.2 使用数组

(1)使用数组

数组名称index:获取第index个元素,从0开始

数组名称*:获取全部元素

(2)案例

代码语言:shell复制
[root@iZ1608aqb7ntn9Z shellTest]# touch array.sh
[root@iZ1608aqb7ntn9Z shellTest]# vim array.sh 
#########写入内容#########
#!/bin/bash
  
array_1=(1 2 3 4 5)

array_2[0]=21
array_2[1]=22
array_2[2]=23
array_2[3]=24
array_2[4]=25

echo array_1 first element is ${array_1[0]} and all elements are [${array_1[*]}]
echo array_2 first element is ${array_2[0]} and all elements are [${array_2[*]}]

#########写入结束#########
[root@iZ1608aqb7ntn9Z shellTest]# ./array.sh 
array_1 first element is 1 and all elements are [1 2 3 4 5]
array_2 first element is 21 and all elements are [21 22 23 24 25]
5.3 数组长度
代码语言:shell复制
echo array_1 length is ${#array_1[*]}
echo array_1 length is ${#array_1[@]}

6 流程控制

6.1 判断语句
6.1.1 if语句

(1)基本语法

代码语言:shell复制
if [ 表达式 ]
then
    语句1
elif [ 表达式 ]
    语句2
else
    语句3
fi

(2)案例

代码语言:shell复制
[root@iZ1608aqb7ntn9Z shellTest]# vim if.sh
#####################写入内容##########################
#!/bin/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

#####################写入内容结束##########################
[root@iZ1608aqb7ntn9Z shellTest]# ./if.sh  2 4
a 小于 b
[root@iZ1608aqb7ntn9Z shellTest]# ./if.sh  8 4
a 大于 b
[root@iZ1608aqb7ntn9Z shellTest]# ./if.sh  4 4
a 等于 b
6.1.2 case语句

(1)基本语法

代码语言:shell复制
case 变量 in
值1)  语句1
    ;;
值2)  语句2
    ;;
值3)  语句3
    ;;
esac

(2)案例

代码语言:shell复制
[root@iZ1608aqb7ntn9Z shellTest]# vim case.sh
#####################写入内容##############################
#!/bin/bash
  
i=$1

case $i in
1) echo "print one"
        ;;
2) echo "print two"
        ;;
3) echo "print three"
        ;;
esac

#####################写入内容结束##########################
[root@iZ1608aqb7ntn9Z shellTest]# ./case.sh 1
print one
[root@iZ1608aqb7ntn9Z shellTest]# ./case.sh 2
print two
[root@iZ1608aqb7ntn9Z shellTest]# ./case.sh 3
print three
6.2 循环语句
6.2.1 for循环

(1)基本语法

代码语言:shell复制
for 变量 in 变量1 变量2 ......
do
     语句
done

(2)案例

代码语言:shell复制
[root@iZ1608aqb7ntn9Z shellTest]# vim for.sh 
#####################写入内容##############################
#/bin/bash
  
for val in 1 2 3 4 5
do
        echo $val
done
#####################写入内容结束##########################
[root@iZ1608aqb7ntn9Z shellTest]# ./for.sh 
1
2
3
4
5
6.2.2 while循环

(1)基本语法

代码语言:shell复制
while(( 表达式 ))
do 
    语句
done

或者 

while true 
do
    语句
done

(2)案例

代码语言:shell复制
[root@iZ1608aqb7ntn9Z shellTest]# vim while.sh 
#!/bin/bash
  
i=1

while(( $i<=3 ))
do
        echo $i
        let "i  "
done
[root@iZ1608aqb7ntn9Z shellTest]# ./while.sh 
1
2
3

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞