计算机基础--Linux详解
Linux 系统
简介
Linux是一种开源的类Unix操作系统,最初由芬兰计算机科学家Linus Torvalds在1991年创建。Linux系统的核心是Linux内核,它是操作系统的核心组件,负责管理系统的资源和提供基本的功能。
Linux系统具有以下特点:
开源:Linux系统是开源的,用户可以自由地查看、修改和分发系统的源代码。
多用户、多任务:Linux系统支持多用户同时登录,并且可以同时运行多个程序。
稳定性和安全性:Linux系统通常被认为比其他操作系统更稳定和安全,因为它有一个强大的权限管理系统和稳定的内核。
可定制性:Linux系统可以根据用户的需求进行定制,用户可以选择安装需要的软件包和定制系统的外观和功能。
兼容性:Linux系统可以在各种不同的硬件平台上运行,包括个人电脑、服务器、嵌入式设备等。
Linux系统通常由Linux内核和GNU工具集合组成,用户可以选择不同的发行版来安装和使用Linux系统,如Ubuntu、Debian、Red Hat、CentOS等。每个发行版都有自己的软件包管理系统和特定的配置工具,以满足不同用户的需求。
总的来说,Linux系统是一个强大、灵活、稳定和安全的操作系统,适用于各种不同的应用场景,从个人电脑到企业服务器。由于其开源的特性和丰富的软件生态系统,Linux系统在全球范围内得到了广泛的应用和支持。
主流的发行版
Linux有许多主流的发行版,每个发行版都有自己的特点和适用场景。以下是一些主流的Linux发行版及其简要介绍:
Ubuntu:Ubuntu是最受欢迎的Linux发行版之一,它以易用性和良好的用户体验而闻名。它有一个庞大的软件仓库,适合桌面用户和服务器用户。
Debian:Debian是一个稳定、可靠的Linux发行版,以其严格的自由软件政策和强大的软件包管理而著称。它通常被用于服务器和嵌入式系统。
Red Hat Enterprise Linux (RHEL) / CentOS:Red Hat Enterprise Linux是一款商业级的Linux发行版,而CentOS则是其免费的社区版本。它们都以稳定性和安全性而闻名,广泛用于企业服务器环境。
Fedora:Fedora是由Red Hat支持的社区驱动的Linux发行版,它以最新的软件和技术为特点,适合技术爱好者和开发人员。
openSUSE:openSUSE是一个用户友好的Linux发行版,具有强大的系统配置工具和良好的图形界面,适合桌面和服务器用户。
Arch Linux:Arch Linux是一个面向技术爱好者的发行版,以其简洁、灵活和滚动更新的特性而著称。
Linux Mint:Linux Mint是基于Ubuntu的发行版,专注于提供易用的桌面环境和多媒体支持。
以上是一些主流的Linux发行版,每个发行版都有自己的优势和适用场景,用户可以根据自己的需求选择合适的发行版。
Linux 安装
VMware安装
下载好安装包,一路下一步即可。
Ubuntu安装
Ubuntu是一款流行的开源操作系统,它基于Debian Linux发行版,由Canonical Ltd. 公司开发和维护。Ubuntu的目标是为用户提供一个易于使用、免费、多功能的操作系统,适用于个人用户、企业和开发人员。
以下是Ubuntu的一些主要特点和功能:
-
免费和开源:Ubuntu是免费且开源的操作系统,用户可以自由地使用、修改和分发它。
-
用户友好:Ubuntu注重用户体验,提供了直观的用户界面和易于使用的应用程序,使其适合于普通用户和初学者。
-
多功能性:Ubuntu支持多种应用程序和工具,包括办公套件、媒体播放器、图形设计工具、开发工具等,满足用户的各种需求。
-
安全性:Ubuntu注重安全性,提供了更新管理、防病毒和防火墙等功能,保护用户的系统和数据安全。
-
社区支持:Ubuntu拥有庞大的社区,用户可以在社区论坛和文档中找到丰富的技术支持和帮助。
-
版本多样性:Ubuntu有多个版本,包括桌面版、服务器版、云计算版等,满足不同用户和场景的需求。
总的来说,Ubuntu是一款功能丰富、易于使用、安全可靠的操作系统,适用于个人用户、企业和开发人员,是一个受欢迎的选择。
Ubuntu下载
清华源下载
下载页面:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.3/
下载地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.3/ubuntu-22.04.3-desktop-amd64.iso
华为云下载
下载页面:https://mirrors.huaweicloud.com/repository/ubuntu-releases/22.04.3/
下载地址:https://mirrors.huaweicloud.com/repository/ubuntu-releases/22.04.3/ubuntu-22.04.3-desktop-amd64.iso
创建虚拟机
选择系统镜像
启动虚拟机
安装系统
启动程序选择
语言选择
键盘布局
更新选择和其他软件
我这里去勾选了下载更新,安装完成以后自己更新,可以提高安装速度。
安装类型
地区选择
用户创建
填写好用户信息后,选择Continue就开始安装,稍等即可。
完成安装
apt包管理工具
apt (Advanced package tool) 是一个命令行包管理工具,适用于 Ubuntu / Debian Linux。apt 用于在 Ubuntu / Debian 系统中从命令行安装、删除、更新和升级 Debian 包。Apt 克服了在 apt-get 命令中注意到的问题和错误。使用 apt 命令时,用户必须具有 sudo 权限。
打开终端
可以在桌面上鼠标右键菜单选择“Open in Terminal”来打开快速打开终端。
安装软件包
sudo apt install 软件1 软件2 软件3 …
-y 直接安装,不用再提示确认
比如要安装vim,安装前要输入密码来确认身份,注意输入正确的密码。
sudo apt install -y vim
清华源配置
为了提高下载速度,可以将默认的源更改为国内源。可以选择的国内源有很多,下面以清华源为例,来进行操作,如下:
官方文档:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
-
备份文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
操作以前先备份一下,以免文件操作错误无法恢复,那就比较浪费时间了。
-
编辑配置文件
sudo vim /etc/apt/sources.list
进入vim命令以后,将原内容清空,直接复制下面的内容,粘贴即可。
vim 命令基本操作:
i 进入编辑模式,编辑内容
esc 进入命令模式->shift+:->wq 保存退出# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse # deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
更新本地apt软件包索引
这个命令执行一下,验证源是否配置成功。
sudo apt update
查看软件包
sudo apt list
删除软件包
注意:这个命令只是说明,不要执行,不然会把vim删除掉的。
sudo apt remove vim
升级软件包
sudo apt upgrade
开启远程ssh访问
SSH工具是指用于实现SSH协议功能的软件或工具。这些工具可以用于在远程计算机上执行命令、传输文件、管理远程系统等操作,同时确保数据传输的安全性。
一些常见的SSH工具包括:
OpenSSH:OpenSSH是一个开源的SSH实现,包括了用于远程登录和文件传输的客户端工具(如ssh、scp)以及用于远程服务的服务器端工具(如sshd)。OpenSSH是Linux和许多其他Unix系统上默认的SSH实现。
OpenSSH下载
PuTTY:PuTTY是一个流行的SSH和Telnet客户端,可在Windows平台上使用。它提供了一个简单的图形界面,用于连接到远程系统并执行命令。
PuTTY下载
SecureCRT:SecureCRT是一款商业SSH客户端,提供了强大的功能,包括多个会话管理、文件传输、安全的远程访问等。
SecureCRT下载
WinSCP:WinSCP是一个用于Windows的免费开源SFTP、SCP和FTP客户端,可以安全地传输文件到远程计算机。
WinSCP下载
MobaXterm:是一款功能强大的跨平台远程计算工具,它集成了许多常用的远程网络工具,包括SSH客户端、X11服务器、RDP客户端、VNC客户端、SFTP客户端等,以及许多常用的Linux命令和工具。
MobaXTerm下载
这些工具可以帮助用户在网络上安全地管理远程系统,执行远程命令,传输文件等操作。通过使用这些工具,用户可以方便地与远程计算机进行交互,而无需担心数据的安全性问题。
安装openssh-server
sudo apt install -y openssh-server
查看ip地址
ip addr
每个人的ip地址都不一样,注意查看自己的。
验证连接
打开cmd,进行验证,也可以使用其他ssh终端工具。
# 命令格式 ssh 用户名@ip地址
ssh ubuntu@192.168.37.134
第1次连接需要输入yes确认一下:
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
如果出现下图,说明服务配置成功了。
文件系统
文件系统概念
??文件系统是计算机操作系统中用来管理文件存储和读取的一种机制。它定义了文件的组织方式、存储方式和访问方式,使得用户可以方便地存储、查找和操作文件。文件系统通常由文件、目录和文件属性组成。文件是存储数据的基本单位,目录用来组织文件,文件属性包括文件的大小、创建时间、修改时间等信息。此外,它还定义了文件的存储方式,包括文件的存储位置和存储格式,不同的文件系统有不同的存储方式,例如FAT、NTFS、ext4等。文件系统还提供了文件的访问方式,包括读取、写入、删除等操作,并可以定义文件的权限,控制用户对文件的访问权限。总之,文件系统为用户提供了方便的文件管理和操作功能,是计算机操作系统中不可或缺的一部分。
Linux常用的文件系统类型包括
ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件 (16TB)、最大1EB的文件系统,以及速度的提升
XFS:适用于大型文件系统和高性能存储,支持大容量的文件和高并发访问。
Btrfs:具有快照、数据压缩和文件系统校验等先进功能的文件系统。
文件管理命令
cd 命令
切换当前目录
cd [目录名]
示例:
cd /etc #切换到/etc目录
cd ~ #切换到用户目录
cd #切换到用户目录
ls 命令
作用:列出指定目录下的内容
语法:ls [OPTION]… [FILE]…
常用的选项参数:
- -a:显示所有文件包括隐藏文件
- -A:显示除.和…之外的所有文件
- -l,–long:显示文件的详细属性信息
- -h:对文件大小进行单位换算,可能影响精度
- -d:查看目录本身而非其内部的文件
- -r:逆序显示文件
- -R:递归显示文件
示例:
ls #查看当前目录
ls -a #当前目录下的所有文件
ls -l #显示当前目录下文件的详细信息
ls /etc #查看/etc目录下的文件
touch 命令
作用:用于修改文件或目录的时间属性,如果文件不存在,touch命令会默认创建一个新的空文件。
语法:touch [OPTION]… [FILE]…
常用的选项参数:
- -a 或 --time=atime 或 --time=access 或 --time=use:只更改存取时间。
- -c 或 --no-create:不建立任何文档。
- -d:使用指定的日期时间,而非现在的时间。
- -f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或 --time=mtime 或 --time=modify:只更改变动时间。
- -r:把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t:使用指定的日期时间,而非现在的时间。
示例:
touch 1.txt #新建1.txt文件
touch -m 1.txt #更新修改时间
cp 命令
作用:复制文件和目录
语法:cp [选项] 源文件 目标文件
常用的选项参数:
- –r:递归复制目录及其内容。
- –p:保留源文件的属性,包括文件权限、所有者和时间戳。
- –f:强制复制,即使目标文件已存在也会覆盖。
- –i:交互式复制,如果目标文件已存在,会提示用户是否覆盖。
- –v:显示复制过程中的详细信息。
示例:
cp 1.txt 2.txt #复制产生2.txt
cp 1.txt 2.txt temp/ #将1.txd、2.txt复制到temp目录下
cp -r dir1/ dir2/ #复制目录
mv 命令
作用:移动文件或目录,或者重命名文件或目录
语法:mv [选项] 源 目标
常用的选项参数:
- -i:在覆盖目标文件之前提示用户确认。
- -f:强制覆盖目标文件,不会提示用户确认。
- -n:不覆盖已存在的文件。
- -u:仅当源文件比目标文件新,或者目标文件不存在时才执行移动操作。
示例:
mv 1.txt 2.txt #将1.txt修改为2.txt
mv 1.txt temp/ #将1.txt移动到temp/目录下
mkdir 命令
作用:创建目录
语法:mkdir [选项] 目录…
常用的选项参数:
- -m, --mode=模式:设定权限<模式>(类似chmod),而不是rwxrwxrwx减umask。
- -p, --parents:递归创建目录,如果上级目录不存在也会一并创建。
- -v, --verbose:显示创建过程中的详细信息。
示例:
mkdir temp #创建单个目录
mkdir -p temp/a/b/c #递归创建多级目录
mkdir -m 755 temp1 #创建目录并设置权限
rm 命令
作用:删除文件或目录
语法:rm [选项] 文件…
常用的选项参数:
- -i:互动模式,在删除前会询问使用者是否执行。
- -f:强制删除,忽略不存在的文件,不会出现警告信息。
- -r:递归删除,常用在目录的删除,此操作属于高危险操作,必须要要谨慎。
- -v:详细显示进行的步骤。
示例:
rm file.txt #删除单个文件
rm file1.txt file2.txt #删除多个文件
rm -r dir/ #删除目录及其内容
rm -f file.txt #强制删除文件
pwd 命令
作用:显示当前工作目录的绝对路径
语法:pwd [选项]
常用的选项参数:
- -L:显示逻辑上的工作目录,使用连接文件路径。
- -P:显示物理上的工作目录,使用实际文件路径。
示例:
pwd #显示当前工作目录的绝对路径
cat 命令
作用:显示文本文件
语法:cat filename
常用的选项参数:
- -n 或 --number:对输出的行数进行编号。
- -b 或 --number-nonblank:只对空白行进行编号。
- -s 或 --squeeze-blank:当遇到连续的空白行时,只显示一行空白行。
- -v 或 --show-nonprinting:显示不可打印字符。
示例:
cat 1.txt #查看1.txt
cat -n 1.txt #查看1.txt,带行号
head 命令
作用:显示文件的开头部分内容
语法:head [选项] [文件]
常用的选项参数:
- -n:指定要显示的行数。
- -c:指定要显示的字节数。
- -q:安静模式,不显示包含给定文件名的文件头。
- -v:显示包含给定文件名的文件头。
示例:
head 1.txt #显示文件的前10行
head -n 5 1.txt #显示文件的前5行
head -c 20 1.txt #显示文件的前20字节
head -30 1.txt #显示文件的前30行(等同于-n 30)
tail 命令
作用:显示文件的末尾部分内容
语法:tail [选项] [文件]
常用的选项参数:
- -n:指定要显示的行数。
- -f:监视文件变化,持续刷新并显示新增内容。
- -q:安静模式,不显示包含给定文件名的文件尾部。
- -v:显示包含给定文件名的文件尾部。
- –pid=PID:与-f合用,表示在进程ID,PID死掉之后结束。
- -s或–sleep-interval=S:与-f合用,表示在每次反复的间隔休眠S秒
示例:
tail 1.txt #显示文件的后10行
tail -n 5 1.txt #显示文件的后5行
tail -f app.log #监视文件变化,持续刷新并显示新增内容,通常用来查看运行服务的日志
more 命令
作用:分页显示文本文件的内容
语法:more [选项] 文件
常用的选项参数:
- +n:从第n行开始显示。
- -n:定义屏幕大小为n行。
- +/pattern:在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示。
- -c:从顶部清屏,然后显示。
示例:
more 1.txt #显示文件的内容,按空格键向下翻页,按 b 键返回上一页
less 命令
作用:强大的文本查看器,它可以用于查看大文件,比cat命令更加高效。less命令支持搜索、滚动、翻页等操作,可以方便地查找和浏览文件内容。
语法:more [选项] 文件
常用的选项参数:
- -N:显示每行的行号。
- -b:设置缓冲区大小。
- -e:当文件显示结束后,自动离开。
- -f:强迫打开特殊文件,例如外围设备代号、目录和二进制文件。
- -g:只标志最后搜索的关键词。
- -i:忽略搜索时的大小写。
- -m:显示类似more命令的百分比。
- -o:将less的输出的内容在指定文件中保存起来。
- -Q:不使用警告音。
- -s:显示连续空行为一行。
- -S:行过长时间将超出部分舍弃。
- -x:将“tab”键显示为规定的数字空格。
示例:
less -N 1.txt #显示文件内容并显示行号
less 1.txt /string #搜索指定字符串
权限管理
Linux系统权限管理是指对Linux系统中的用户和组进行权限控制,以保护系统的安全和数据的完整性。Linux系统中的每个文件和目录都有相应的权限属性,这些属性决定了哪些用户可以对文件或目录进行读、写和执行等操作。
chmod 命令
作用:改变文件或目录的访问权限。
语法:chmod [选项] 模式 文件名
常用的选项参数:
- -R:递归。
- -c:仅在发生更改时报告。
- -f:忽略错误信息。
- -v:显示详细的处理信息。
参数:
- u:表示文件所有者。
- g:表示同组用户。
- o:表示其他用户。
- a:表示所有用户,它是系统默认值。
- +:表示添加某个权限。
- -:表示取消某个权限。
- =:表示赋予给定权限并取消其他所有权限(如果有的话)。
在权限的表示中,r代表可读(read)、w代表可写(write)、x代表可执行(execute)。另外,数字设定法则更为简单。在这种方法中,用数字来表示各个权限,其中4代表可读,2代表可写,1代表可执行,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
示例:
#文件所有者的权限为可读、可写、可执行
#同组用户的权限为可读、可执行
#其他用户的权限为可读、可执行
chmod 755 文件名
chmod u+x 文件名 #文件所有者增加对文件的可执行权限
chmod -R 777 temp #temp目录下的所有文件具有所有权限
chgrp 命令
作用:改变文件或目录所属的用户组的。
语法:chgrp [选项] 组 文件…
常用的选项参数:
- -R:递归地改变指定目录及其包含的所有文件和子目录的所属组。
- -v:显示详细的处理信息,即列出被更改的文件或目录的名称。
- -c:或者 --changes,仅当更改发生时才显示输出(通常与 -v 一起使用)。
- -f:或者 --silent、–quiet,在更改文件或目录的所属组时不显示错误信息。
示例:
#递归地将目录 temp 及其所有子文件和子目录的所属组更改为 groupname
chgrp -R groupname temp
chown 命令
作用:设置文件所有者和文件关联组。
语法:chown [选项] [所有者][:[组]] 文件…
所有者:表示要将文件或目录的所有者更改为的用户,可以是用户名或用户ID。
组:表示要将文件或目录的所属组更改为的组,可以是组名或者组ID。
文件:是以空格分开的要改变权限的文件列表,支持通配符。
常用的选项参数:
- -R:递归地更改指定目录及其子目录下的所有文件和目录的所有者或所属组。
- -v:显示详细的处理信息,包括每个文件或目录的更改结果。
- -c:仅显示发生更改的文件或目录的信息。
- -f:忽略错误信息,不显示错误提示。
- -h:如果文件是一个符号链接,则更改符号链接的所有者或所属组,而不是链接的目标文件。
示例:
chown test 1.txt #将文件的所有者更改为test
sudo 命令
作用:sudo命令是一个常用的工具,允许已验证的用户以其他用户的身份来执行命令,通常是超级用户(root)的身份。通过使用sudo,系统管理员可以赋予普通用户执行一些或全部的root命令的权限,这样不仅减少了root用户的登录和管理时间,也提高了系统的安全性。
使用sudo时,用户必须输入自己的密码,并且有5分钟的有效期限。超过期限后,必须重新输入密码。
语法:sudo [选项] 命令
常用的选项参数:
- -b:命令会在后台执行命令。
- -H:将HOME环境变量设置为新身份的HOME环境变量。
- -l:列出用户可执行和不可执行的命令。
- -s:执行指定的shell。
示例:
sudo apt update #更新包索引
su 命令
作用:用于切换用户身份,如果不指定用户名,则默认切换到超级用户(root)账户。
语法:su [选项] [用户名]
常用的选项参数:
- -c<指令>或–command=<指令>:执行指定的指令后,即恢复原来的身份。
- -f或–fast:适用于csh与tsch,使shell不用去读取启动文件。
- –l或–login:改变身份时,也同时变更工作目录,以及HOME、SHELL、USER、LOGNAME。此外,也会变更PATH变量。
- -s或–shell=:指定要执行的shell(bash、csh、tcsh等),预设值为/etc/passwd内的该使用者(USER)shell。
示例:
su test1 #切换到test1用户
在使用su命令切换用户身份时,需要输入目标用户的密码,只有拥有目标用户密码的用户才能切换到该用户账户。同时,su命令也有一些安全风险,因此在使用时需要谨慎操作。
网络管理
ip 命令
作用:ip 命令在 Linux 中是一个强大的工具,用于显示和操作路由、设备、策略路由和隧道的 IPv4 和 IPv6 地址。
用法很多,在需要的时候再进行查询。
- 显示网络接口配置/查看IP
ip addr
- 显示路由表
ip route show
- 启用或禁用网络接口
ip link set <interface> up/down
- 显示网络接口统计信息
ip -s link show
netstat 命令
作用:netstat是一个在Linux中常用的命令,用于显示网络连接、路由表、接口统计等网络相关信息。
常用的选项参数:
- -a或–all:显示所有网络连接和监听端口。
- -t或–tcp:仅显示TCP协议的连接情况。
- -n或–numeric: 以数字形式显示地址和端口号。
- -u或–udp:仅显示UDP协议的连接情况。
- -l或–listening:仅显示监听状态的连接。
- -r或–route:显示路由表信息。
- -s或–statistics:显示每个协议的统计数据,包括TCP、UDP、IP等协议的统计信息。
- -e或–以太网:显示以太网的统计数据,包括传送的字节数、数据包、错误等。
ping 命令
作用:ping命令是一个常用的网络诊断工具,用于测试网络连接的质量和检查目标主机是否在线。
常用的选项参数:
- -c:指定发送的ICMP回显请求数量。
- -s:设置发送的数据包大小。
- -v:显示详细的输出信息。
示例:
ping www.xxx.com
ping -c 4 www.xxx.com
shell编程
Shell 编程指的是使用 shell 脚本来控制 shell 的行为。shell 是 Unix/Linux 系统中的一个命令行解释器,用户可以在 shell 中输入命令来执行各种操作。而 shell 脚本则是将一系列的 shell 命令组合在一起,形成一个可执行的脚本文件,通过运行这个脚本文件可以自动执行一系列的操作。
Shell 编程的基本语法包括:
注释:使用 # 符号表示注释,注释内容不会被执行。
变量:使用 $variable 的形式表示变量,变量名可以包含字母、数字和下划线,但不能以数字开头。
命令:使用 shell 命令来执行各种操作。
条件判断:使用 if-then-else 或 case 语句来进行条件判断。
循环控制:使用 for、while 等循环控制语句来重复执行一系列操作。
函数:使用 function 关键字定义函数,并在脚本中调用函数。
Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell 。
Hello world
-
创建一个脚本文件1.sh,内容如下:
#!/bin/bash echo "Hello, World!"
-
执行以下命令
chmod +x 1.sh #添加执行权限 ./1.sh #执行脚本
-
执行结果
这个脚本使用 #!/bin/bash 表示使用 bash shell 来执行脚本,然后使用 echo 命令打印出 “Hello, World!”。
输入输出
-
echo
echo是一个常用的命令,用于在终端上显示文本或变量的值。echo命令可以用于输出简单的文本字符串或变量的内容。echo "Hello, World!" name="ABC" echo "My name is $name" #输出变量 echo -n "等待中..." #-n 不换行 echo -e "abc\t12" #-e 转义转义字符
-
read
read 命令在 shell 脚本中用于从标准输入(例如键盘)读取一行数据。这可以用于读取用户输入,或者从文件或管道中读取数据。echo "请输入您的名字: " read name echo "您好, $name!"
声明变量
在Shell脚本中,变量声明是用来创建变量并为其分配值的操作。变量名可以由字母、数字和下划线组成,但不能以数字开头。变量名是大小写敏感的,因此var1和VAR1是两个不同的变量。
-
基本语法
name=value
其中,name 是你要声明的变量名,value 是你要分配给变量的值。你可以根据需要为变量分配不同的值。注意,在等号两边不能有空格,变量名称的定义不要和环境变量、其他命令冲突。
-
变量的使用
A1=123 A2="Hello world!" #值中有空格时,要用单引号或双引号引起来 A3='Hello world!' #和A2的定义是一样的 A4="Hello $A3" #会解析变量A3 A5='Hello $A3' #不会解析变量A3 echo $A1 echo $A2 echo $A3 echo $A4 echo $A5 echo "${A3}A" #如果变量和字符串之间没有分隔符,可以使用大括号
注意观察单引号和又引号的区别
条件判断
在Shell脚本中,条件判断用于根据特定条件执行不同的操作。
-
语法
if [ 条件 ]; then # 执行语句 elif [ 条件 ]; then # 执行语句 else # 执行语句 fi
常见条件包括字符串比较(-eq、-ne、-lt、-gt、-le、-ge)、文件比较(-e、-d、-f、-s、-L、-S)和逻辑操作(-a、-o)
常见的条件比较:- -eq 等于(==)
- -ne 不等于 (!=)
- -lt 小于 (<)
- -gt 大于 (>)
- -le 小于等于 (<=)
- -ge 大于等于 (>=)
常见的条件比较:
- -e file 检测file存在
- -d file 检测file是否为目录
- -f file 检测file是否为常规文件
- -s file 如果file长度不为0,则为真
- -L file 检测file是否为符号链接
- -S file 检测file是否为套接字(socket)
逻辑操作:
- -a
- -o
-
test命令
if test condition; then # 执行语句 fi
循环控制
在Shell脚本中,循环控制是一种允许代码重复执行特定操作的机制。
-
for循环
for i in 1 2 3 4 5 do echo $i done for i in value1 value2 ... valuen do echo $i done
-
while循环
i=1 while [ $i -le 5 ] do echo $i i=$((i+1)) done
-
until循环
i=1 until [ $i -gt 5 ] do echo $i i=$((i+1)) done
函数
在Shell脚本中,函数是一段可重复使用的代码块,可以在脚本中被调用执行。Shell函数可以提高代码的可重用性和可维护性,并且可以用于封装复杂的逻辑和操作。
-
语法
function 函数名称() { # 函数体 # 执行语句 }
-
示例
function add() { n1=$1 #参数1 n2=$2 #参数2 echo $((n1 + n2)) } add 4 5 #调用函数,不用带小括号
在shell调用命令
-
直接执行
直接在脚本中使用命令,就像在命令行中一样,例如:echo "Hello world!" ls ping -c 4 www.xxxx.com
-
使用$()
获取命令的执行结果,例如:A1=$(echo "Hello, World!") echo $A1 A2=$(expr 1 + 3) echo $A2
-
使用反引号(``)
这种方法与$()相似,都可以获取到命令的执行结果,例如:A1=`echo "Hello, World!"` echo $A1 A2=`expr 1 + 3` echo $A2
-
使用exec
exec命令可以用来执行另一个命令,替换当前进程,例如:exec ls -l
-
使用source
命令用于在当前Shell环境中执行脚本文件,不会创建新的进程,例如:source ./other.sh
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!