Linux 脚本编程全解析
1. 条件语句与循环基础
在 Linux 脚本编程中,条件语句和循环是非常重要的部分。首先,
echo $?
可以查看上一个命令的退出状态,退出状态为 1 通常表示命令执行出现问题。这些知识在后续讨论条件语句和循环时会很有用。
1.1 条件语句
条件语句用于根据不同的条件执行不同的代码块。主要有以下几种形式:
-
if - then 语句
:这是最简单的形式,当命令的退出状态为 0 时,执行
then
后面的代码块。
if command
then
body
fi
例如:
if [ `whoami` = "root" ]
then
echo "You are the superuser"
fi
-
if - then - else 语句
:当命令的退出状态为 0 时,执行
then后面的代码块;否则,执行else后面的代码块。
if command
then
body1
else
body2
fi
例如:
if [ `whoami` = "root" ]
then
echo "You are the superuser"
else
echo "You are an ordinary dude"
fi
-
if - then - elif - else 语句
:可以有多个条件判断,依次检查每个条件,直到找到一个退出状态为 0 的条件,执行相应的代码块;如果所有条件都不满足,则执行
else后面的代码块。
if command1
then
body1
elif command2
then
body2
elif ...
...
else
bodyN
fi
例如:
if [ `whoami` = "root" ]
then
echo "You are the superuser"
elif [ "$USER" = "root" ]
then
echo "You might be the superuser"
elif [ "$bribe" -gt 10000 ]
then
echo "You can pay to be the superuser"
else
echo "You are still an ordinary dude"
fi
- case 语句 :用于对单个值进行评估,并根据不同的模式执行相应的代码块。
case string in
expr1)
body1
;;
expr2)
body2
;;
...
exprN)
bodyN
;;
*)
bodyelse
;;
esac
例如:
echo "What would you like to do?"
read answer
case "$answer" in
eat)
echo "OK, have a hamburger"
;;
sleep)
echo "Good night then"
;;
*)
echo "I'm not sure what you want to do"
echo "I guess I'll see you tomorrow"
;;
esac
1.2 循环语句
循环语句用于重复执行一组命令,主要有以下几种形式:
-
while 循环
:只要命令的退出状态为 0,就会一直执行循环体中的代码。
while command
do
body
done
例如:
i=0
while [ $i -lt 3 ]
do
echo "$i"
i=`expr $i + 1`
done
- until 循环 :直到命令的退出状态为 0 时,才会停止执行循环体中的代码。
until command
do
body
done
例如:
i=0
until [ $i -ge 3 ]
do
echo "$i"
i=`expr $i + 1`
done
- for 循环 :用于遍历一个列表中的每个值,并对每个值执行一次循环体中的代码。
for variable in list
do
body
done
例如:
for name in Tom Jack Harry
do
echo "$name is my friend"
done
for 循环在处理文件列表时非常方便,例如:
for file in *.doc *.docx
do
echo "$file is a stinky Microsoft Word file"
done
需要注意的是,要避免使用无限循环,例如:
while true
do
echo "forever"
done
until false
do
echo "forever again"
done
可以使用
break
或
exit
命令在满足一定条件时终止这些循环。
2. 循环控制:break 和 continue
break
和
continue
是用于控制循环执行流程的两个重要命令。
-
break 命令
:用于跳出最近的一层循环。例如:
for name in Tom Jack Harry
do
echo $name
if [ "$name" = "Jack" ]
then
break
fi
echo "again"
done
echo "all done"
执行结果为:
Tom
again
Jack
all done
- continue 命令 :用于跳过当前循环的剩余部分,直接进入下一次循环。例如:
for name in Tom Jack Harry
do
echo $name
if [ "$name" = "Jack" ]
then
continue
fi
echo "again"
done
echo "all done"
执行结果为:
Tom
again
Jack
Harry
again
all done
虽然
break
和
continue
也可以接受一个数字参数(
break N
,
continue N
)来控制多层循环,但这种用法会使代码变得复杂,不建议使用。
3. 创建和运行 Shell 脚本
创建和运行 Shell 脚本有以下几种常见的方法:
-
添加
#!/bin/bash
并使文件可执行
:这是最常见的运行脚本的方法。
1. 在脚本文件的第一行添加
#!/bin/bash
,并左对齐。
2. 使用
chmod +x myscript
命令使脚本文件可执行。
3. 可以将脚本文件移动到搜索路径中的目录。
4. 像执行其他命令一样运行脚本,例如
myscript
;如果脚本在当前目录,但当前目录不在搜索路径中,需要使用
./myscript
。
-
传递给 bash
:bash 会将参数解释为脚本的名称并运行它,例如
bash myscript
。
-
在当前 shell 中运行
:使用
source
或
.
命令可以在当前 shell 中运行脚本,使脚本对当前 shell 产生影响,例如
$ . myscript
或
$ source myscript
。
4. 命令行参数
Shell 脚本可以像其他 Linux 命令一样接受命令行参数和选项。在脚本中,可以使用
$1
、
$2
、
$3
等引用这些参数。例如:
#!/bin/bash
echo "My name is $1 and I come from $2"
运行脚本:
$ ./myscript Johnson Wisconsin
My name is Johnson and I come from Wisconsin
$ ./myscript Bob
My name is Bob and I come from
可以使用
$#
测试脚本接收到的参数数量:
if [ $# -lt 2 ]
then
echo "$0 error: you must supply two arguments"
else
echo "My name is $1 and I come from $2"
fi
$0
包含脚本的名称,常用于使用和错误消息。可以使用
for
循环和特殊变量
$@
遍历所有命令行参数:
for arg in $@
do
echo "I found the argument $arg"
done
5. 带返回码退出
exit
命令用于终止脚本并将给定的返回码传递给 shell。通常,脚本成功时返回 0,失败时返回 1 或其他非零值。如果脚本没有调用
exit
,返回码将自动为 0。例如:
if [ $# -lt 2 ]
then
echo "$0 error: you must supply two arguments"
exit 1
else
echo "My name is $1 and I come from $2"
fi
exit 0
运行脚本:
$ ./myscript Bob
./myscript error: you must supply two arguments
$ echo $?
1
6. 超越 Shell 脚本
虽然 Shell 脚本适用于许多目的,但 Linux 还提供了更强大的脚本语言和编译型编程语言。以下是一些常见的语言及其入门信息:
| 语言 | 程序 | 入门指南 |
| — | — | — |
| C, C++ | gcc, g++ | man gcc
http://www.gnu.org/software/gcc/ |
| .NET | mono | man mono
http://www.mono-project.com/ |
| Java | javac | http://java.sun.com/ |
| Perl | perl | man perl
http://www.perl.com/ |
| PHP | php | man php
http://www.php.net/ |
| Python | python | man python
http://www.python.org/ |
| Ruby | ruby | http://ruby-lang.org/ |
通过学习和使用这些更高级的语言,你可以开发出更复杂、更强大的程序。同时,Linux 系统中还有许多其他的命令和功能等待你去探索和学习,不断提升你的技术能力。
Linux 脚本编程全解析(续)
7. 命令与符号索引及常见操作
在 Linux 系统中,有众多的命令和符号,它们各自有着不同的功能和用途。以下是一些常见命令和符号的详细介绍:
7.1 命令相关
-
文件操作命令
-
cp:用于复制文件,例如cp source_file destination_file。 -
mv:可用于移动或重命名文件,如mv old_name new_name。 -
rm:删除文件,rm file_to_delete。 -
mkdir:创建目录,mkdir new_directory。 -
rmdir:删除空目录,rmdir empty_directory。
-
-
文件查看命令
-
cat:显示文件内容,cat file_to_view。 -
less:分页查看文件内容,less large_file。 -
head:查看文件开头部分,head -n 10 file表示查看文件前 10 行。 -
tail:查看文件结尾部分,tail -n 5 file查看文件后 5 行。
-
-
进程管理命令
-
ps:查看当前运行的进程,ps -ef可查看所有进程信息。 -
kill:终止进程,kill -9 process_id强制终止指定进程。 -
top:实时显示系统中各个进程的资源占用情况。
-
7.2 符号相关
-
&:将命令放到后台运行,如command &。 -
&&:逻辑与,前面的命令执行成功才会执行后面的命令,command1 && command2。 -
||:逻辑或,前面的命令执行失败才会执行后面的命令,command1 || command2。 -
|:管道符,将一个命令的输出作为另一个命令的输入,command1 | command2。
以下是一个简单的 mermaid 流程图,展示了文件操作的基本流程:
graph LR
A[选择操作] -->|复制| B(cp命令)
A -->|移动/重命名| C(mv命令)
A -->|删除| D(rm命令)
A -->|创建目录| E(mkdir命令)
A -->|删除空目录| F(rmdir命令)
8. 环境变量与系统信息查看
环境变量在 Linux 系统中起着重要的作用,它们可以影响系统和程序的行为。以下是一些常见的环境变量及其用途:
| 环境变量 | 用途 |
| — | — |
|
PATH
| 定义了系统查找可执行文件的路径,多个路径用冒号分隔。 |
|
HOME
| 用户的主目录。 |
|
USER
| 当前登录用户的用户名。 |
|
DISPLAY
| 用于图形显示的设置。 |
可以使用
printenv
命令查看所有环境变量,例如
printenv
。也可以使用
echo
命令查看单个环境变量的值,如
echo $PATH
。
系统信息的查看对于了解系统状态和性能非常有帮助。以下是一些查看系统信息的命令:
-
uname
:查看系统的基本信息,
uname -a
可查看详细信息。
-
hostname
:查看主机名。
-
df
:查看磁盘使用情况,
df -h
以人类可读的格式显示。
-
free
:查看内存使用情况。
9. 网络相关操作
在 Linux 系统中,网络操作是非常常见的。以下是一些常见的网络命令及其用途:
-
ping
:用于测试网络连接,
ping target_ip
。
-
ifconfig
:查看和配置网络接口信息。
-
ssh
:通过安全的 SSH 协议远程登录到其他主机,
ssh user@remote_host
。
-
scp
:用于在不同主机之间安全地复制文件,
scp local_file user@remote_host:destination
。
-
traceroute
:跟踪数据包从本地主机到目标主机所经过的路由,
traceroute target_host
。
以下是一个简单的列表,展示了网络连接的基本步骤:
1. 使用
ping
命令测试网络连通性。
2. 如果需要远程登录,使用
ssh
命令。
3. 若要传输文件,使用
scp
命令。
10. 软件安装与管理
在 Linux 系统中,有多种软件安装和管理的方式。常见的包管理系统有 Debian 系列的
apt
和 Red Hat 系列的
yum
或
dnf
。
10.1 Debian 系列(如 Ubuntu)
-
apt-get:用于安装、更新和删除软件包。-
安装软件包:
sudo apt-get install package_name -
更新软件包列表:
sudo apt-get update -
升级已安装的软件包:
sudo apt-get upgrade -
删除软件包:
sudo apt-get remove package_name
-
安装软件包:
-
dpkg:用于直接操作 Debian 软件包文件(.deb文件)。-
安装软件包:
sudo dpkg -i package_file.deb -
卸载软件包:
sudo dpkg -r package_name
-
安装软件包:
10.2 Red Hat 系列(如 CentOS)
-
yum或dnf:用于安装、更新和删除软件包。-
安装软件包:
sudo yum install package_name或sudo dnf install package_name -
更新软件包列表并升级所有软件包:
sudo yum update或sudo dnf update -
删除软件包:
sudo yum remove package_name或sudo dnf remove package_name
-
安装软件包:
以下是一个 mermaid 流程图,展示了软件安装的基本流程:
graph LR
A[选择系统类型] -->|Debian系列| B(apt-get或dpkg)
A -->|Red Hat系列| C(yum或dnf)
B -->|安装| D(sudo apt-get install或sudo dpkg -i)
B -->|更新| E(sudo apt-get update/upgrade)
B -->|删除| F(sudo apt-get remove或sudo dpkg -r)
C -->|安装| G(sudo yum/dnf install)
C -->|更新| H(sudo yum/dnf update)
C -->|删除| I(sudo yum/dnf remove)
通过掌握这些 Linux 脚本编程、命令操作、环境变量、网络操作和软件管理的知识,你可以更加高效地使用 Linux 系统,开发出更强大的脚本和程序,满足不同的需求。不断实践和探索,你将在 Linux 技术领域取得更大的进步。
超级会员免费看

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



