Shell编程基础是许多计算机编程爱好者和工程师所必须掌握的技能之一,尤其是对于Linux和Unix系统的用户,Shell脚本可以自动化很多常规任务,提高生产效率,减少错误发生的概率。本文将从基础入门开始,一步一步带领读者熟练掌握Shell编程基础。
一、Shell编程概述
Shell是一种命令行解释器,它可以帮助用户将多条命令组合起来,形成一个可执行的脚本文件。Shell编程是一种脚本编程语言,主要用于Unix、Linux等操作系统。与大多数编程语言相同,Shell编程的基本组成部分包括变量、循环结构、判断结构以及函数等。Shell编程的脚本文件通常使用.sh作为文件扩展名。
二、Shell脚本变量
在Shell脚本中,变量是一种可以存储数据的容器,它可以存储数字、字符串等类型的数据。定义变量的语法是variable_name=value,其中等号两端不要留有空格。例如:
```
#!/bin/bash
var1="Hello"
var2=123
```
变量名可以由字母、数字和下划线组成,但必须以字母或下划线开头。变量的值可以在脚本中使用,通过在变量名前加上$符号来引用。例如:
```
#!/bin/bash
var1="Hello"
var2=123
echo $var1 $var2
```
输出结果为Hello 123。需要注意的是,在Shell脚本中,所有变量都是字符串类型,但是可以使用一些工具将它们转换成其他类型,例如数值型。
三、Shell脚本控制结构
Shell脚本的控制结构包括条件语句、循环语句和函数等。
1. 条件语句
条件语句可以根据条件的真假来执行不同的命令。常见的条件语句有if语句、case语句等。if语句的语法如下:
```
if [ conditional expression ]
then
command1
command2
...
elif [ conditional expression ]
then
command3
command4
...
else
command5
command6
...
fi
```
其中,条件表达式可以使用比较运算符、逻辑运算符等来判断真假。例如:
```
#!/bin/bash
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
else
echo "a is less than b"
fi
```
输出结果为a is less than b。
2. 循环语句
循环语句可以重复执行一组命令。Shell脚本中常见的循环语句有for循环、while循环和until循环等。for循环的语法如下:
```
for var in list
do
command1
command2
...
done
```
其中,list可以是一个字符串、一个数组,也可以通过命令输出的结果构成。例如:
```
#!/bin/bash
for var in aeiou
do
echo $var
done
```
输出结果为:
```
a
e
i
o
u
```
3. 函数
函数是将一组命令封装成一个可执行的代码块,可以有输入参数和返回值。Shell脚本中定义函数的语法如下:
```
function_name () {
commands
...
[return value]
}
```
其中,命令用于实现函数的功能,return value可选,用于返回函数的返回值。例如:
```
#!/bin/bash
function sayhello {
echo "Hello, $1"
}
sayhello "Lucy"
```
输出结果为Hello, Lucy。
四、Shell脚本实战
在掌握了Shell编程的基础知识之后,可以开始进行实战演练,以更深入地理解Shell脚本。
1. 文件批量重命名
将指定目录下的所有txt文件重命名为bak文件的Shell脚本。代码如下:
```
#!/bin/bash
cd /path/to/folder
for i in *.txt
do
mv "$i" "${i%.txt}.bak"
done
```
2. 计算机资源监控
使用Shell脚本实现对计算机CPU、内存、磁盘空间的监控,脚本每隔一分钟输出一次监控结果。代码如下:
```
#!/bin/bash
while true
do
cpu=$(top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1}')
mem_used=$(free -m | awk '/^Mem:/{print $3}')
mem_total=$(free -m | awk '/^Mem:/{print $2}')
mem_used_percent=$(awk "BEGIN {printf \"%.2f\",${mem_used}/${mem_total}*100}")
disk_used=$(df -h / | awk '/^\/dev/{print $3}')
disk_total=$(df -h / | awk '/^\/dev/{print $2}')
disk_used_percent=$(df -h / | awk '/^\/dev/{print $5}')
echo "CPU used: $cpu%"
echo "Memory used: ${mem_used_percent}%"
echo "Disk used: ${disk_used_percent}"
sleep 60
done
```
以上是Shell编程基础以及两个实战案例。Shell编程在日常开发和实际工作中扮演了不可忽视的角色,希望读者通过本文的学习,能够掌握Shell脚本编程的基础知识,快速上手实践,提高生产效率。