Shell介绍
Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又能利用Shell 脚本编程,完成更加复杂的操作。
shell简单、灵活、高效,特别适合处理一些系统管理方面的小问题。shell可以实现自动化管理,让系统管理员的工作变得容易、简单、高效。shell脚本可轻松方便读取和修改源代码,不需要编译。
Linux的Shell种类众多,常见的有:
Bourne Shell (/usr/bin/sh 或/bin/sh)、Bourne Again Shell (/bin/bash)、C Shell (/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root (/sbin/sh),等等。
Bash也是大多数Linux系统默认的Shell。在般情况下,人们并不区分Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#/bin/bash。
利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:
#!/bin/sh
#comments //注释
Your commands go here
首行中的符号#告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。
编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行的:
chmod +X filename.sh
执行脚本的方法是:
./filename.sh
下面我们从经典的“hello world" 入手,看一看最简单的Shell脚本的模样:
#!/bin/sh
#print hello world in the console window
a ="hello world"
echo $a
Shell Script 是一种弱类型语言,使用变量的时候无需首先声明其类型。变量赋值的方式是:
variable name = variable value
如果对一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加$,$variable_name可以在引号中使用。
Shell编程
1、编写一个Shell脚本,完成以下功能:
1)显示文字“Waiting for a while….” l
2)显示当前目录下面扩展名为”.h”的文件和目录,并输出重定向到/home/file.txt文件
提示:显示文字可使用echo命令,搜索文件可使用find命令
为脚本创建文件script1.sh:
vim script1.sh
Shell脚本:
#!/bin/bash
# 显示文字
echo "Waiting for a while...."
# 显示当前目录下所有.h扩展名的文件和目录,并输出重定向到/home/file.txt
find . -name "*.h" > /home/file.txt
# 可以在脚本末尾添加查看文件内容的命令,以验证输出
cat /home/file.txt
赋予执行权限:
chmod +x script1.sh
执行结果:
2、编写一个Shell脚本,完成以下功能
计算8以内(含8)不是3的整数倍的数字的和
为脚本创建文件script2.sh:
vim script2.sh
Shell脚本:
#!/bin/bash
sum=0
# 使用for循环计算8以内不是3的整数倍的数字的和
for i in {1..8}
do
if [ $((i % 3)) -ne 0 ]; then
sum=$((sum + i))
fi
done
# 显示结果
echo "The sum of numbers not divisible by 3 from 1 to 8 is: $sum"
赋予执行权限:
chmod +x script2.sh
执行结果:
3、编写一个Shell脚本,在当前目录创建5个目录,目录的命名形式分别为:
dir-1,dir-2,….,dir-5
为脚本创建文件script3.sh:
vim script3.sh
Shell脚本:
#!/bin/bash
# 使用for循环在当前目录创建5个目录
for i in {1..5}
do
mkdir "dir-$i"
# 可以添加检查是否创建成功的语句
if [ $? -eq 0 ]; then
echo "Directory dir-$i created successfully."
else
echo "Failed to create directory dir-$i."
fi
done
赋予执行权限:
chmod +x script3.sh
执行结果: