SHELL教程(简易⼊门版)
SHELL教程
⼀.简介
Shell 是⼀个⽤ C 语⾔编写的程序,它是⽤户使⽤ Linux 的桥梁。Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。
Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。
Shell 编程跟 JavaScript、php 编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。
Linux 的 Shell 种类众多,本教程关注的是 Bash,也就是 Bourne Again Shell,由于易⽤和免费,Bash 在⽇常⼯作中被⼴泛使⽤。同时,Bash 也是⼤多数Linux 系统默认的 Shell。
⼀般情况下,我们不区分bash和sh,⽐如#!/bin/sh 和 #!/bin/bash是⼀样的。
1.1 第⼀个shell脚本
#!/bin/bash
echo"hello world"
#!是⼀个约定的标记,它告诉系统这个脚本需要⽤什么解释器来执⾏,也就是使⽤哪⼀种bash。
1.2 运⾏shell的两种⽅式
1. 作为可执⾏程序
将上边的代码保存为test.sh,并 cd 到相应⽬录。
chmod a+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 告诉系统说,就在当前⽬录。
2. 作为解释器参数
这种运⾏⽅式,通过直接运⾏解释器,其参数就是shell脚本的⽂件名
sh test.sh
bash test.sh
⼆.变量
2.1 变量的定义
定义变量时,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语⾔都不⼀样。同时,变量名的命名须遵循如下规则:命名只能使⽤英⽂字母,数字和下划线,⾸个字符不能以数字开头。
中间不能有空格,可以使⽤下划线(_)。
不能使⽤标点符号。
不能使⽤bash⾥的关键字(可⽤help命令查看保留关键字)。
只读变量不能重新赋值。
2.2 变量的使⽤
想要使⽤定义过的变量,只需要在变量名前加$即可。⽐如
your_name="qinjx"
echo$your_name
echo${your_name}
变量名两边的花括号是可选的,加花括号是为了帮助解释器识别变量的边界,⽐如下⾯这种情况:
for skill in Ada Coffe Action Java;
do
echo"I am good at ${skill}Script"
done
已经定义的变量可以重新赋值,⽐如
your_name="tom"
echo$your_name
your_name="alibaba"
echo$your_name
#这样写是合法的,但注意,第⼆次赋值的时候不能写$your_name="alibaba",使⽤变量的时候才加美元符($)。
如果给变量加上readonly关键字,则这个变量成为只读变量。
#!/bin/bash
myUrl="www.doit51"
readonly myUrl
myUrl="www.51doit"
删除变量,使⽤unset关键字可以删除变量,但是只读变量不能通过这样的⽅式删除。
name=zs
echo$name
unset name
echo$name
字符串是shell编程中最常⽤最有⽤的数据类型(除了数字和字符串,也没啥其它类型好⽤了),字符串可以⽤单引号,也可以⽤双引号,也可以不⽤引号。
单引号
str='this is a string'
#单引号⾥的任何字符都会原样输出,单引号字符串中的变量是⽆效的;
#单引号字串中不能出现单独⼀个的单引号(对单引号使⽤转义符后也不⾏),但可成对出现,作为字符串拼接使⽤。
双引号
your_name='zs'
str="Hello, I know you are \"$your_name\"! \n"
echo$str
拼接字符串
your_name="zs"
# 使⽤双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo$greeting$greeting_1
# 使⽤单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo$greeting_2$greeting_3
2.3 参数传递以及⼏个特殊的变量
我们可以在执⾏ Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表⼀个数字,1 为 执⾏脚本的第⼀个参数,2 为执⾏脚本的第⼆个参数,以此类推
#!/bin/bash
echo"Shell 传递参数实例!";
echo"执⾏的⽂件名:$0";
echo"第⼀个参数为:$1";
echo"第⼆个参数为:$2";
echo"第三个参数为:$3";
参数处
理
说明
$#传递到脚本的参数个数
$*以⼀个单字符串显⽰所有向脚本传递的参数。 如"$*“⽤「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运⾏的当前进程ID号
$!后台运⾏的最后⼀个进程的ID号
$@与@“⽤「”」括起来的情况、以"$1" “n” 的形式输出所有参数。
$?显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误。
#!/bin/bash
echo"Shell 传递参数实例!";
echo"第⼀个参数为:$1";
echo"参数个数为:$#";
echo"传递的参数作为⼀个字符串显⽰:$*";
三.运算符
算数运算符
关系运算符
布尔运算符
字符串运算符
⽂件测试运算符
3.1 算数运算符
原⽣bash不⽀持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常⽤。
expr 是⼀款表达式计算⼯具,使⽤它能完成表达式的求值操作。
例如,两个数相加(注意使⽤的是反引号``单引号 ):
#!/bin/bash
#注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的⼤多数编程语⾔不⼀样。
val=`expr 2 + 2`
echo"两数之和为 : $val"
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
∗相同,但是使⽤时加引号,并在引号中返回每个参数。如"2"…"
*乘法expr $a \* $b 结果为 200。
+加法expr $a + $b 结果为 30。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。⽤于⽐较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。⽤于⽐较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。
a==
**注意:**条件表达式要放在⽅括号之间,并且要有空格,例如: [b] 是错误的,必须写成 [ $a == $b ]。
#!/bin/bash
a=10
shell代码b=20
val=`expr $a + $b`
echo"a + b : $val"
val=`expr $a - $b`
echo"a - b : $val"
val=`expr $a \* $b`
echo"a * b : $val"
val=`expr $b / $a`
echo"b / a : $val"
val=`expr $b % $a`
echo"b % a : $val"
if[$a==$b]
then
echo"a 等于 b"
fi
if[$a!=$b]
then
echo"a 不等于 b"
fi
注意:
乘号(*)前边必须加反斜杠()才能实现乘法运算;
可以⽤$((表达式))来替代expr,这样简便很多。
3.2 关系运算符
关系运算符只⽀持数字,不⽀持字符串,除⾮字符串的值是数字。
运算符说明举例
-
eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否⼤于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否⼩于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否⼤于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否⼩于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
#!/bin/bash
a=10
b=20
if[$a -eq $b]
then
echo"$a -eq $b : a 等于 b"
else
echo"$a -eq $b: a 不等于 b"
fi
if[$a -ne $b]
then
echo"$a -ne $b: a 不等于 b"
else
echo"$a -ne $b : a 等于 b"
fi
if[$a -gt $b]
then
echo"$a -gt $b: a ⼤于 b"
else
echo"$a -gt $b: a 不⼤于 b"
fi
if[$a -lt $b]
then
echo"$a -lt $b: a ⼩于 b"
else
echo"$a -lt $b: a 不⼩于 b"
fi
if[$a -ge $b]
then
echo"$a -ge $b: a ⼤于或等于 b"
else
echo"$a -ge $b: a ⼩于 b"
fi
if[$a -le $b]
then
echo"$a -le $b: a ⼩于或等于 b"
else
echo"$a -le $b: a ⼤于 b"
fi
3.3 布尔运算符
运算符说明举例
!⾮运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有⼀个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论