Shell脚本语言基础
1 基本介绍
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
2 Hello World
2.1 文件命名和头部标识、执行方式
文件命名:一般以xx.sh
为shell脚本文件的名称
头部标识:一般在文件内容的第一行加入#!/bin/bash
执行方式:一般使用命令./xx.sh
执行shell脚本文件
2.2 编写HelloWorld
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 示例
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 基本使用
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 定义数组
方式一:
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 复制代码
注:shell只有一维数组
5.2 使用数组
(1)使用数组
数组名称[index]:获取第index个元素,从0开始
数组名称[*]:获取全部元素
(2)案例
[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 数组长度
echo array_1 length is ${#array_1[*]} echo array_1 length is ${#array_1[@]} 复制代码
6 流程控制
6.1 判断语句
6.1.1 if语句
(1)基本语法
if [ 表达式 ] then 语句1 elif [ 表达式 ] 语句2 else 语句3 fi 复制代码
(2)案例
[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)基本语法
case 变量 in 值1) 语句1 ;; 值2) 语句2 ;; 值3) 语句3 ;; esac 复制代码
(2)案例
[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)基本语法
for 变量 in 变量1 变量2 ...... do 语句 done 复制代码
(2)案例
[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)基本语法
while(( 表达式 )) do 语句 done 或者 while true do 语句 done 复制代码
(2)案例
[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