Shell编程
什么是shell编程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
变量
1 #变量由字母、下划线、数字组成; 2 #由字母、下划线开头 3 4 #!/bin/bash 5 #正确的写法 6 str="hello shell" 7 8 #错误写法 9 str = "hello shell" 10 #注意shell在要求定义变量的时候,等号两边不能有空格 11 #我们在使用变量的时候在变量名前面加$ 12 13 #删除变量 14 unset $str 15 16 #设置为只读变量,不能修改他的值(这和PHP的常量很像) 17 readonly $str
输出
1 #!/bin/bash 2 #---------------------------------echo----------------------------------- 3 #echo和PHP的一样,都是输出,他也可以输出多个值,中间以逗号的形式隔开 4 str="hello shell" 5 str1="hello PHP" 6 echo $str,$str1 #同时输出变量str、str的值 7 #双引号和单引号也和PHP的一样,单引号不解析变量,双引号解析变量 8 9 #在输出的时候也和PHP一样也可以加一些换行符之类的操作 10 11 echo "hello Shell\n"#注意换行符和字符串不能有空格 12 echo "hello PHP" 13 14 #-----------------------------------printf-------------------------------- 15 printf "%-10s %-4s" 姓名 性别 #"-"标识左对齐,没有就表示右对齐 16 printf "%-10s %-4s" Shell 男 #“%-”后面的数字,标识显示的长度 17 18 #printf和C语言的一样,对输出进行格式化, 19 #%s:标识输出的是字符串 20 #%d:输出的是整型 21 #%f:输出的是浮点型 22 #%c:输出的是字符
字符串
1 #!/bin/bash 2 #字符串的三中写法 3 4 echo hello world 5 echo 'hello world' 6 echo "hello world" 7 8 #获取字符串的长度 9 str="hello world" 10 echo ${#str} 11 12 #字符串的截取 13 str="hello world" 14 echo ${str:1:2} #第一个冒号的数字是开始位置,后面的数字是截取的长度 15 16 #查找字符串 17 str="hello world" 18 echo `expt index "$str" o` #输出o第一次出现的索引下标,下标从1开始 19 20 #拼接字符串 21 echo "hello"world" #输出的是helloworld 22 echo 'hello''world'
运算符
算数运算符
运算符 | 描述 | 举例 |
+ | 加法 | `expr $a + $b` |
- | 减法 | `expr $a - $b` |
* | 乘法 | `expr $a \* $b` |
/ | 除法 | `expr $a / $b` |
% | 求余 | `expr $a % $b` |
= | 赋值 | a=$b |
== | 相等(用于比较两个数字) | [ $a == $b ] |
!= | 不等(用于比较两个数字) | [ $a != $b ] |
关系运算符
运算符 | 描述 | 举例 |
-eq | 检测两个数是否相等 | [ $a -eq $b ] |
-ne | 检测两个数是否不等 | [ $a -nq $b ] |
-gt | 大于符 | [ $a -gt $b ] |
-lt | 小于符 | [ $a -lt $b ] |
-ge | 大于等于符 | [ $a -ge $b ] |
-le | 小于等于符 | [ $a -le $b ] |
布尔运算符
运算符 | 描述 | 举例 |
! | 非运算 | [ $a ! $b ] |
-o | 或运算 | [ $a -o $b ] |
-a | 与运算 | [ $a -a $b ] |
字符串运算
运算符 | 描述 | 举例 |
str | 检测字符串是否为空 | [ str ] |
-n | 检测字符串的长度,长度不为空返回TRUE | [ -n str ] |
-z | 检测字符串的长度,为空返回TRUE | [ -z str ] |
文件测试运算符
运算符 | 描述 | 举例 |
-f | 是否为普通文件 | [ -f $file ] |
-d | 是否是目录 | [ -d $file ] |
-r | 是否为可读文件 | [ -r $file ] |
-w | 是否为可写文件 | [ -w $file ] |
-x | 是否为可运行文件 | [ -s $file ] |
-e | 文件是否存在 | [ -e $file ] |
-s | 文件是否为空 | [ -s $file ] |
逻辑运算
运算符 | 描述 | 举例 |
&& | 逻辑与 | [ $a && $b ] |
|| | 逻辑或 | [ $a || $b ] |
数组
1 #!/bin/bash 2 3 arr=(0 1 2 3 4 5 6 4 8 9 7)#数组的元素,以空格隔开,下标从0开始 4 5 #获取某个下标的值 6 echo ${arr[0]} #获取下标为0的值 7 8 #获取数组所有的值 9 echo ${arr[@]} 10 echo ${arr[*]} 11 12 #获取数组的长度 13 echo ${#arr[@]}
传递参数
1 #首先创建一个test.sh的shell文件 2 #!/bin/bash 3 echo "运行的文件名是: $0" 4 echo "输入的第一个参数是: $1" 5 echo "输入第二个参数是: $2" 6 7 #我们在命令行输入 8 ./test.sh 1 2 #第一个参数的值是1,第二个参数的值是2 9 10 #接收参数的格式是$加参数的标识 11 12 #获取所有的参数 13 echo "输出所有的参数:$*" #输出的格式是:"1 2 3 4" 14 echo "输出所有的参数:$@"#输出的格式是: "1" "2" "3" 15 16 #获取参数的个数 17 echo "输出参数的个数:$#"
流程控制
if-else
1 #!/bin/bash 2 #-------------------------------if-else---------------------------------- 3 str="123" 4 if [ -n $str ] 5 then 6 echo "当前字符串不为空" 7 else 8 echo "当前字符串为空" 9 fi 10 #-------------------------------if-elif-else-------------------------- str=100 11 if [ $str -gt 50 ] 12 then 13 echo "该数大于50" 14 elif [ $str -lt 30 ] 15 then 16 echo "该数小于30" 17 else 18 echo "数据有误" 19 fi
for循环
1 #!/bin/bash 2 for loop in 1 2 3 4 5 3 do 4 echo $loop 5 done
while循环
#!/bin/bash str=10 while (($str > 0)) do echo "hello" let "str--" done
case
1 #!/bin/bash 2 str=1 3 case $tr in 4 1) echo "输出1" 5 ;; 6 2) echo "输出2" 7 ;; 8 *) echo "请检查你的输入" 9 ;; 10 esac
函数
1 #!/bin/bash 2 demo(){ 3 echo "这是一个函数" 4 } 5 demo#调用函数 6 7 #---------------------------------函数的传参----------------------------- 8 demo(){ 9 echo "这是第一个参数:$1" 10 echo "这是第二个参数:$2" 11 } 12 demo 1 2#1就是第一个参数的值,2就是第二个参数的值
输入输出重定向
1 #!/bin/bash 2 #将输出重定向到file 3 command > file 4 5 #将输入重定向 6 command < file 7 8 #将输出追加到file 9 command >> file 10 11 #将输出文件进行合并 12 n >& m 13 14 #将输入文件进行合并 15 n <& m 16 17 #-----------------------文件的类型-------------------------- 18 command 0 > file 将读取的数据写入file 19 command 1 > file 将输出的数据写入file 20 command 2 > file 将错误信息写入file
文件包含
1 #!/bin/bash 2 #文件的包含其实就是文件的引用,就像PHP的include、require一样,在一个#文件里面引用另一个文件 3 #两种方式 4 5 . ./test.sh 6 7 source ./test.sh 8 9