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
"#注意换行符和字符串不能有空格
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  
原文地址:https://www.cnblogs.com/meichao/p/9509967.html