2021-04-15

数据来源:拉钩教育大数据高薪开发训练营

Linux的shell编程

Shell 是⼀个⽤ C 语⾔编写的程序, 通过 Shell ⽤户可以访问操作系统内核 服务。它类似于 DOS 下的command 和后来的 cmd.exe。Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。 Shell script 是⼀种为 Shell 编写的脚本程序。 Shell 编程⼀般指 Shell 脚本编程,不是指开发 Shell ⾃身。 Shell 编程跟java、 php 编程⼀样,只要有⼀个能编写代码的⽂本编辑器 和⼀个能解释执⾏的脚本解释器就可以了。 Linux 的 Shell 种类众多, ⼀个系统可以存在多个 Shell,可以通过 cat /etc/shells 命令查看系统中安装的 Shell。 Bash 由于易⽤和免费,在⽇常⼯作中被⼴泛使⽤。同时, Bash 也是⼤多数 Linux 系统默认的 Shell。

第一节 基本格式

使⽤ vi 编辑器新建⼀个⽂件 hello.sh。 扩展名并不影响脚本执⾏,⻅名知 意。 ⽐如⽤ php 写 Shell 脚本,扩展名就⽤ .php。

#!/bin/bash
echo "Hello World !"

”!“是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏,即使⽤哪⼀种 Shell。 echo 命令⽤于向窗⼝输出⽂本。 Shell 脚本的执⾏: chmod +x ./hello.sh #使脚本具有执⾏权限 ./hello.sh #执⾏脚本 直接写 hello.sh, Linux系统会去PATH⾥寻找有没有叫 hello.sh的。 ⽤./hello.sh 告诉系统说,就在当前⽬录找。 还可以作为解释器参数运⾏。 直接运⾏解释器,其参数就是Shell 脚 本的⽂件名,如: /bin/sh /root/hello.sh /bin/php test.php 这种⽅式运⾏脚本,不需要在第⼀⾏指定解释器信息,写了也不⽣效。

第二节 shell变量

1.语法格式

变量=值,如: your_name=“itcast.cn” 注意:变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则: ⾸个字符必须为字⺟( a-z, A-Z) 中间不能有空格,可以使⽤下划线(_) 不能使⽤标点符号 不能使⽤ bash ⾥的关键字(可⽤ help 命令查看保留关键字)

2.变量使⽤

使⽤⼀个定义过的变量,只要在变量名前⾯加 $ 即可。
your_name=“itcast.cn”
echo $your_name
echo ${your_name}
花括号是可选的,加不加都⾏,加花括号是为了帮助解释器识别变量的边界。
已定义的变量,可以被重新定义。
使⽤ readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
使⽤ unset 命令可以删除变量。 不能删除只读变量。
readonly variable_name
unset variable_name

3.变量类型

局部变量 :
局部变量在脚本或命令中定义,仅在当前 Shell 实例中有效,其他 Shell 启动的程序不能访问局部变量。
环境变量 :
所有的程序,包括 Shell 启动的程序,都能访问环境变量,有些程
序需要环境变量来保证其正常运⾏。 可以⽤过 set 命令查看当前环境变量。
Shell 变量 :
Shell 变量是由 Shell 程序设置的特殊变量。 Shell 变量中有⼀部分是环境变量,有⼀部分是局部变量,这些变量保证了 Shell 的正常运⾏。

4.参数传递

在执⾏ Shell 脚本时, 可以向脚本传递参数。
脚本内获取参数的格式为: $n。 n 代表⼀个数字, 1 为执⾏脚本的第⼀个参
数, 2 为执⾏脚本的第⼆个参数,以此类推…… $0 表示当前脚本名称。

5.特殊字符

$# 传递到脚本的参数个数
$* 以⼀个单字符串显示所有向脚本传递的参数。
$$ 脚本运⾏的当前进程 ID 号。
$! 后台运⾏的最后⼀个进程的 ID 号。
@ 与 @ 与 @相同,但是使⽤时加引号,并在引号中返回每个参数。
$? 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。
例⼦:
#!/bin/bash
echo “第⼀个参数为: $1”;
echo “参数个数为: $#”;
echo "传递的参数作为⼀个字符串显示: $
";
执⾏脚本: ./test.sh 1 2 3;

$* 、 $@的区别
相同点: 都表示传递给脚本的所有参数。
不同点:
不被"“包含时, ∗ 和 *和 @都以$1 $2… n 的 形 式 组 成 参 数 列 表 。 被 " " 包 含 时 , " n 的形式组成参数列表。 被" "包含时, " n"""*” 会将所有的参数作为⼀个整体,以"$1 $2 … n " 的 形 式 组 成 ⼀ 个 整 串 ; " n"的形式组成⼀个整串; " n""@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2""n” 的
形式组成⼀个参数列表。

‘’、""的区别
''特殊字符不替换
""特殊字符替换

6.Shell 运算符

Shell 和其他编程语⾳⼀样,⽀持包括:算术、关系、 布尔、字符串等运
算符。 原⽣ bash 不⽀持简单的数学运算,但是可以通过其他命令来实现,例如
expr。 expr 是⼀款表达式计算⼯具,使⽤它能完成表达式的求值操作。例如加,减,乘,除等操作
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 ``包含,注意不是单引号,在 Esc 键下边。
例如,以下表示⼀些数据的运算
#!/bin/bash
echo “hello world”
a=4
b=20
#加法运算
echo expr $a + $b
#减法运算
echo expr $b - $a
#乘法运算,注意*号前⾯需要反斜杠
echo expr $a \* $b
#除法运算
echo expr $b / $a
注意:
此外,还可以通过(())、 $[]进⾏算术运算。
count=1
((count++))
echo c o u n t a = count a= counta=((1+2))
a=$[1+2]

第三节流程控制

1.if else语句

if condition1 then command1 elif condition2 then command2 else commandN fi
条件表达式写法
EQ 就是 EQUAL等于
NQ 就是 NOT EQUAL不等于
GT 就是 GREATER THAN⼤于 
LT 就是 LESS THAN⼩于
GE 就是 GREATER THAN OR EQUAL ⼤于等于
LE 就是 LESS THAN OR EQUAL ⼩于等于

注意:与expr一样,[ ]中表达式和运算符之间要有空格

#!/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

2.for循环

⽅式⼀

for N in 1 2 3
do
echo $N
done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done

⽅式⼆

for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

需求:使⽤for循环打印数字以及当前系统所有进程

#!/bin/bash
#循环打印 1 2 3这三个数字
for N in 1 2 3
do
 echo $N
done
a=1
b=2
c=3
for N in $a $b $c
do
 echo $N
done

打印当前系统所有进程
``:反引号,调用shell命令

#
for N in `ps -ef`
do
 echo $N
done

2.while语法

⽅式⼀

while expression
do
commanddone

⽅式⼆

#!/bin/bash
i=1
while (( i <= 3))
do
 let i++
 echo $i
done

let 命令是 BASH 中⽤于计算的⼯具,⽤于执⾏⼀个或多个表达式,变量
计算中不需要加上 $ 来表示变量。 ⾃加操作: let no++ ⾃减操作: let no—
⽅式三: ⽆限循环

while true
do
command
done

3.case语句

casein
模式 1)
command1
command2
...
commandN
;;
模式 2)
command1
command2
...
commandN
;;
esac

使⽤case语句实现交互会话

#!/bin/bash
echo '输⼊ 1 到 4 之间的数字:'
echo '你输⼊的数字为:'
read aNum
case $aNum in
 1) echo '你选择了 1'
 ;;
 2) echo '你选择了 2'
 ;;
 3) echo '你选择了 3'
 ;;
 4) echo '你选择了 4'
 ;;
 *) echo '你没有输⼊ 1 到 4 之间的数字'
 ;;
esac

第四节 函数使用

所有函数在使⽤前必须定义。这意味着必须将函数放在脚本开始部分,直⾄
Shell 解释器⾸次发现它时,才可以使⽤。 调⽤函数仅使⽤其函数名即可。
[ function ] funname [()]
{
action;
[return int;]
}
1、可以带 function fun()定义,也可以直接 fun() 定义,不带任何参数。
2、参数返回,可以显示加 return ,如果不加,将以最后⼀条命令运⾏结
果,作为返回值。 return 后跟数值 n(0-255)。

1.函数参数

在 Shell 中,调⽤函数时可以向其传递参数。在函数体内部, 通过 $n 的形
式来获取参数的值,例如, $1 表示第⼀个参数, 2 表 示 第 ⼆ 个 参 数 . . . 注 意 , 当 n > = 10 时 , 需 要 使 ⽤ 2 表示第⼆个参数... 注意, 当 n>=10 时,需要使⽤ 2...n>=10使{n}来获取参数。

funWithParam(){
echo "第⼀个参数为 $1 !"
echo "第⼆个参数为 $2 !"
echo "第⼗个参数为 $10 !"
echo "第⼗个参数为 ${10} !"
echo "第⼗⼀个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为⼀个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

定义我们⾃⼰的函数并在Shell脚本当中调⽤函数

#!/bin/bash
hello(){
 echo "hello world"
 echo "第⼀个参数为 $1"
 echo "第⼆个参数为 $2"
}
hello abc 123

结语

shell开发在许多开发者技能树中,都非必点项;但是,往往在开发中,一些简单的逻辑,使用shell开发可以到达事半功倍的效果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值