Linux-shell编程

 什么是shell

shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。
shell是一个在操作系统之上的软件,Linux登录后默认进入这个软件.
shell是一个命令的解释器.
shell拥有自己内建的命令集
什么是bash
bash是shell的扩展,并且完全兼容shell(类似vi与vim的关系)
什么是shell script
shell脚本(shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。由于习惯的原因,简洁起见,本文出现的“shell编程”都是指shell脚本编程,不是指开发shell自身(如Windows Explorer扩展开发)。

执行脚本

运行Shell脚本有两种方法:

作为可执行程序

chmod +x test.sh
./test.sh

注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。

作为解释器参数

这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:

sh test.sh
bash test.sh

变量

定义变量

变量以字母或者下划线开头,后面接任意长度的字母、数字和下划线,如 var=linux
如果变量的值中间有空格,需要用双引号引起来,如var="hello world"
定义变量时,变量名不加美元符号($),如:

your_name="qinjx"
your_name='qinjx'
your_name=qinjx

注意!!!变量赋值时两边不能有空格!!!

变量的引用

变量的引用需要在前面加$符号 ,如:

echo $var
echo "$var"

单引号与双引号的区别

单引号里的变量不解析
双引号里的变量会解析成对应的值

name1="qinjx1"
name4="hello $name1"        # 输出:hello qinjx1        (解析)
name5='hello $name1'        # 输出:hello $name1        (不解析)

特殊变量

$n         代表第n个参数
$*         代表所有参数
$#         代表参数的个数
$?         代表上一个命令的返回状态(0表示成功,非0不成功)

命令替换

命令替换有两种方式:

echo $(id)
echo `id`

在执行命令的时候,会先将$()或者``里的命令先执行一遍

命令替换和管道的区别

命令替换是讲一个命令的输出作为另外一个命令的参数
管道是将命令的输出作为下一个命令的标准输入

算数运算和赋值

赋值

((i=1+1))
let j=2+2
y=$(($i+$j))

使用

echo $i $j $y

命令分隔符

分号(;)是shell的命令分隔符, 让同一行的命令能够顺序执行。如echo 1 ;echo 2

其他分隔符

[command1] && [command2]    
[command1] || [command2]

&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行
||则与&&相反。如果||左边的命令未执行成功,那么||右边的命令就会执行

if语句

if基本语法

if [ 表达式 ];then [具体逻辑];fi
if command;then [具体逻辑];fi

表达式必须用[]括起来,另外[]里外都需要空格与周围隔开(例如: [ a == b ] ),否则会报错

条件测试类型

整数测试

-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于

字符串测试

== 等于  
!= 不等
>  大于
<  小于
-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真

文件测试

(两边要有空格)

-e file 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行

组合测试

-a: and
-o: or
!: 非

for循环

for arg in [list]
do
    [command]
done

while循环

while [command/condition]
do
    [command]
done

函数

定义函数

function name(){
    [command]
}

调用

name

shell函数可以带function关键字,也可以不带
shell函数内可以加return返回值,也可以不带,如果不带就以最后一条命令运行结果,作为返回值.

原文地址:https://www.cnblogs.com/sunch/p/10013331.html