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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!