Bash Shell脚本编程入门与Linux安装指南
1. Bash Shell脚本中的Case语句
Case语句是Bash Shell脚本中用于多条件判断的一种结构。下面通过一个示例来详细介绍其用法。
示例脚本如下:
#!/bin/bash
# soccer
# Your personal soccer expert
# predicts world championship football
cat << EOF
Enter the name of the country you think will be world soccer champion in 2010.
EOF
read COUNTRY
# translate $COUNTRY into all uppercase
COUNTRY=`echo $COUNTRY | tr a-z A-Z`
# perform the test
case $COUNTRY in
NEDERLAND | HOLLAND | NETHERLANDS)
echo "Yes, you are a soccer expert "
;;
DEUTSCHLAND | GERMANY | MANNSCHAFT)
echo "No, they are the worst team on earth"
;;
ENGLAND | AUSTRALIA)
echo "hahahahahahaha, you must be joking"
;;
*)
echo "Huh? Do they play soccer?"
;;
esac
exit 0
这个脚本可以用于分析下一届世界杯冠军(当然,你可以根据自己喜欢的任何重大体育赛事进行修改)。其工作流程如下:
1. 提示用户输入他们认为会成为2010年世界杯冠军的国家名称。
2. 将用户输入的国家名称存储在
$COUNTRY
变量中。
3. 使用
tr
命令将用户输入的内容转换为全大写,以确保
case
语句的大小写敏感性不会影响判断结果。
4. 使用
case
语句对用户输入的内容进行判断:
- 如果输入的是
NEDERLAND
、
HOLLAND
或
NETHERLANDS
,则输出
Yes, you are a soccer expert
。
- 如果输入的是
DEUTSCHLAND
、
GERMANY
或
MANNSCHAFT
,则输出
No, they are the worst team on earth
。
- 如果输入的是
ENGLAND
或
AUSTRALIA
,则输出
hahahahahahaha, you must be joking
。
- 如果输入的内容不在上述范围内,则输出
Huh? Do they play soccer?
。
case
语句的通用结构如下:
alternative1 | alternative2)
command
;;
需要注意的是,每个选项判断结束后要用
;;
来表示结束,否则脚本会出错。同时,为了处理用户输入的不在预期范围内的内容,通常会在
case
语句的最后使用
*)
来表示其他所有情况。
2. 使用while循环
while
循环用于在某个条件满足时持续执行命令。下面是两个使用
while
循环的示例。
示例1:监控进程活动
#!/bin/bash
# procesmon
# usage: monitor <processname>
while ps aux | grep $1
do
sleep 1
done
logger $1 is no longer present
exit 0
这个脚本的作用是监控指定名称的进程是否存在。具体步骤如下:
1. 使用
ps aux | grep $1
命令检查进程是否存在。
2. 如果进程存在,则
while
循环的条件满足,执行循环体内的命令,即等待1秒钟后再次检查。
3. 当进程不再存在时,
while
循环的条件不满足,退出循环,并使用
logger
命令将信息写入系统日志。
示例2:监控IP地址是否存在
#!/bin/bash
# ipmon
# script that monitors an IP address
# usage: ipmon <ip-address>
while ip a s | grep $1/ > /dev/null
do
sleep 5
done
logger HELP, the IP address $1 is gone.
exit 0
这个脚本用于监控指定的IP地址是否存在。其工作原理与监控进程类似,当IP地址不存在时,将信息写入系统日志。
3. 使用until循环
until
循环与
while
循环相反,它会一直执行命令直到某个条件满足为止。以下是一个使用
until
循环监控用户登录的示例:
#!/bin/bash
# usermon
# script that alerts when a user logs in
# usage: ishere <username>
until who | grep $1 >> /dev/null
do
echo $1 is not logged in yet
sleep 5
done
echo $1 has just logged in
exit 0
这个脚本的工作流程如下:
1. 使用
who | grep $1
命令检查指定用户是否登录。
2. 如果用户未登录,则
until
循环的条件不满足,执行循环体内的命令,即输出用户未登录的信息,并等待5秒钟后再次检查。
3. 当用户登录后,
until
循环的条件满足,退出循环,并输出用户已登录的信息。
4. 使用for循环
for
循环用于对一系列项目执行命令。以下是几个使用
for
循环的示例。
示例1:创建计数器
#!/bin/bash
# counter
# counter that counts from 1 to 9
for (( counter=1; counter<10; counter++ )); do
echo "The counter is now set to $counter"
done
exit 0
这个脚本使用
for
循环创建了一个从1到9的计数器。具体步骤如下:
1. 初始化计数器
counter
为1。
2. 当
counter
小于10时,执行循环体内的命令,即输出当前计数器的值。
3. 每次循环结束后,计数器的值加1。
4. 当
counter
达到10时,退出循环。
示例2:显示文本文件的行
#!/bin/bash
# listusers
# faulty script that tries to show all users in /etc/passwd
for i in `cat /etc/passwd`
do
echo $i
done
exit 0
这个脚本使用
for
循环逐行显示
/etc/passwd
文件的内容。需要注意的是,这种方法不能处理行中的空格,因为空格会被解释为字段分隔符。
示例3:测试IP地址范围
#!/bin/bash
for i in $@
do
ping -c 1 192.168.1.$i
done
这个脚本使用
for
循环对指定范围内的IP地址进行ping测试。
$@
表示脚本启动时指定的所有参数。
5. 区分$@和$*
在处理脚本参数时,
$@
和
$*
是两个常用的参数引用方式。下面通过一个示例来展示它们的区别:
#!/bin/bash
# showargs
# this script shows all arguments used when starting the script
echo showing for on \$@
for i in "$@"
do
echo $i
done
echo showing for on \$*
for i in "$*"
do
echo $i
done
exit 0
在这个脚本中,使用了转义字符
\
和双引号
"
来确保
$@
和
$*
在脚本执行时被正确解释。运行脚本时,
$@
会将每个参数作为一个独立的元素处理,而
$*
会将所有参数作为一个整体处理。
以下是运行示例脚本的结果:
nuuk:~/bin # ./showargs a b c d
showing for on $@
a
b
c
d
showing for on $*
a b c d
nuuk:~/bin #
6. 常见Bash Shell脚本元素总结
| 元素 | 说明 |
|---|---|
#!/bin/bash
| 表示shebang,告诉父shell使用哪个shell来解释脚本。 |
#
| 表示注释行,用于解释脚本的功能。 |
exit
| 通知父shell脚本是否执行成功,建议在脚本末尾使用。 |
echo
| 在脚本执行时将文本显示在标准输出上。 |
source
| 在当前shell环境中包含一个脚本,而不启动子shell。 |
.
|
与
source
的作用相同。
|
read
| 暂停脚本以读取用户输入,并将其存储在变量中。 |
which
| 搜索路径以查找可执行文件的位置,在给脚本命名之前使用,避免使用已存在的名称。 |
$0
| 引用脚本名称。 |
$1, $n
| 引用脚本启动时使用的参数。 |
$@
| 引用所有参数。 |
$#
| 给出脚本启动时使用的参数数量。 |
$*
| 引用所有参数。 |
\
| 转义下一个字符,使其不被shell解释。 |
"..."
| 转义下一个字符串,使某些字符不被shell解释,通常用于包含空格的字符串。 |
'...'
| 转义下一个字符串,使所有字符都不被shell解释。 |
expr
| 执行计算。 |
let
| 执行计算。 |
test
| 执行测试,例如检查文件是否存在或值的大小比较。 |
if ... then ... else
| 当某个条件满足时执行命令。 |
while ... do ... done
| 只要某个条件满足就执行命令。 |
until ... do ...done
| 一直执行命令直到某个条件满足。 |
case ... esac
| 检查不同的选项,并根据满足的选项执行命令。 |
for ... do ... done
| 对一系列项目执行命令。 |
7. 安装Linux
7.1 安装要求
- 内存:512 MB RAM即可。
- 磁盘空间:至少4 GB。
- 平台:需要64位平台以支持现代Linux服务器操作系统的所有功能。
为了学习Linux并完成相关练习,建议使用虚拟化软件,如VMware Workstation / Player for Windows、VMware Fusion for Apple或Oracle VirtualBox。
7.2 安装CentOS
以下是安装CentOS的基本步骤:
1. 从安装介质启动CentOS,选择
Install CentOS 7
并按回车键开始安装。
2. 安装程序加载完成后,在欢迎界面选择语言和键盘设置,建议选择英语,然后按
Continue
继续。
3. 在安装摘要屏幕中,进行所有必要的配置选择。
- 点击
软件选择
链接,可选择最小安装(不安装图形用户界面,仅安装最小软件包集)或
Server with GUI
安装模式(安装图形用户界面)。
- 点击
Installation Destination
链接,选择要使用的磁盘设备,然后点击
Done
确认。
- 点击
网络和主机名
链接,确保网卡已启用,并可保留默认设置以从DHCP服务器获取IP地址,关闭此屏幕后即可开始安装。
4. 安装开始后,在安装软件包的过程中,可设置root密码并创建用户。
5. 输入root密码两次以避免输入错误,然后点击
Done
将配置写入磁盘,也可选择创建用户账户。
通过以上步骤,你可以完成CentOS的基本安装,并开始学习和使用Linux。
Bash Shell脚本编程入门与Linux安装指南
8. 安装Ubuntu Server 14.04 LTS
安装Ubuntu Server 14.04 LTS的步骤如下:
1.
准备安装介质
:制作包含Ubuntu Server 14.04 LTS镜像的USB驱动器或光盘。
2.
启动安装程序
:将安装介质插入计算机,从该介质启动计算机,进入安装界面。
3.
选择语言
:在安装界面中,选择你想要使用的语言,然后按回车键继续。
4.
选择键盘布局
:选择合适的键盘布局,按回车键确认。
5.
配置网络
:
- 如果你的网络使用DHCP自动分配IP地址,系统会自动配置网络。
- 如果需要手动配置网络,按照提示输入IP地址、子网掩码、网关和DNS服务器等信息。
6.
设置主机名
:输入你为服务器设置的主机名,按回车键确认。
7.
设置时区
:选择你的地理位置对应的时区,按回车键确认。
8.
磁盘分区
:
- 可以选择自动分区,让系统自动分配磁盘空间。
- 也可以选择手动分区,根据自己的需求对磁盘进行分区。完成分区后,确认分区设置。
9.
设置用户信息
:
- 设置root用户的密码。
- 创建一个普通用户账户,输入用户名、密码等信息。
10.
安装软件包
:系统会提示你选择要安装的软件包,你可以根据自己的需求进行选择,然后开始安装软件包。
11.
安装GRUB引导加载程序
:安装完成后,系统会提示安装GRUB引导加载程序到硬盘,确认安装。
12.
完成安装
:安装完成后,移除安装介质,重启计算机,即可使用新安装的Ubuntu Server 14.04 LTS系统。
9. 脚本编程与安装的关联及应用场景
在Linux系统安装完成后,Bash Shell脚本编程可以在很多方面发挥重要作用,以下是一些常见的应用场景:
| 应用场景 | 说明 | 示例脚本 |
| — | — | — |
| 系统监控 | 定期检查系统的各种状态,如进程、磁盘空间、内存使用等。 | 前面提到的监控进程活动和IP地址的脚本。 |
| 自动化部署 | 自动安装和配置软件,减少手动操作的工作量。 | 可以编写脚本自动安装和配置Web服务器、数据库等。 |
| 数据处理 | 对文件中的数据进行处理和分析。 | 例如对日志文件进行统计分析。 |
| 定时任务 | 按照设定的时间间隔执行特定的任务。 | 可以使用
cron
结合脚本实现定时备份文件。 |
10. 总结与展望
通过学习Bash Shell脚本编程和Linux系统的安装,我们掌握了一系列实用的技能。Bash Shell脚本编程可以帮助我们提高工作效率,自动化完成各种任务;而Linux系统的安装则为我们提供了一个强大的操作平台。
在未来的学习和工作中,我们可以进一步深入研究Bash Shell脚本编程,学习更多的高级技巧和命令,如函数的使用、脚本的调试等。同时,也可以尝试在不同的Linux发行版上进行实践,了解它们之间的差异和特点。
以下是一个简单的mermaid流程图,展示了Bash Shell脚本编程和Linux安装的整体流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始学习]):::startend --> B(学习Bash Shell脚本编程):::process
B --> C(学习各种循环和条件语句):::process
C --> D(实践脚本编写):::process
A --> E(准备安装Linux):::process
E --> F(选择Linux发行版):::process
F --> G{选择CentOS?}:::decision
G -->|是| H(安装CentOS):::process
G -->|否| I(安装Ubuntu Server 14.04 LTS):::process
H --> J(使用脚本进行系统管理):::process
I --> J
D --> J
J --> K([完成学习和实践]):::startend
通过不断的学习和实践,我们可以更好地利用Bash Shell脚本编程和Linux系统,为我们的工作和学习带来更多的便利和效率提升。希望大家在这个过程中能够不断探索和发现,掌握更多的技能和知识。
超级会员免费看
74

被折叠的 条评论
为什么被折叠?



