一、基础
1. 文件和目录结构
Linux系统中的一切都是文件,根目录是/,下面有/root、/bin、/boot、/dev、/usr各目录的作用如下:
/bin 是Binary的缩写,存放最常使用的二进制命令。 /sbin 是系统级的二进制命令,存储系统管理员可以使用的命令。 /lib 是库目录,存放跟文件系统中的程序运行所需要的共享库及内核模块。 /lib64 lib用于32位系统,lib64用于64位系统。 /boot 存放的是Linux启动文件和内核。 /dev 存放Linux外部设备用于系统,Linux将所有设备视为文件。 /etc 存储系统的主要配置文件,如用户的帐户密码文件。 /home 宿主目录,用户登录系统,位置为/home,home下没有root用户。 /root root用户目录。 /opt 是主机额外安装软件的目录。 /media 在连接移动媒体(如U盘)时,通过此目录访问移动媒体的内容。 /mnt 与/media类似的目录需要系统管理员手动挂载文件系统。 /proc 该目录包含关于当前运行过程和核心参数的信息。 /srv 该目录包含系统提供的服务数据。 /sys 存储系统硬件信息。 /tmp 临时存储数据的临时目录。 /var 如系统日志、用户跟踪等。 /usr 所有可执行文件、库和大多数系统程序的源代码都保存在本目录中。
2. vi/vim编辑器
vim是vi的升级版,vim有三种常见模式:
-
正常模式
在正常模式下, 我们可以使用快捷键。
以vim打开文档直接进入一般模式(这是默认模式)。在此模式下, 你可以使用『上下左右』 按键移动光标, 你可以使用『删除字符』 或『删除整行』 处理档案内容, 也可以使用『复制、 贴上』 处理您的文件数据.
-
编辑模式
在模式下, 程序员可以输入内容。 按下 i, I, o, O, a, A, r, R 在进入编辑模式之前,等待任何字母, 一般来说按 i 即可。
-
命令行模式
在这种模式下, 您可以提供相关指令, 完成读取、 存盘、 替换、 离开 vim 、 在这种模式下实现了显示行号等动作!
vim常用命令
3. 网络配置
网络常用配置:
- 查看所有网络接口的配置信息
ifconfig 显示所有网络接口的配置信息
root@VM-4-8-ubuntu:/etc# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.4.8 netmask 255.255.252.0 broadcast 10.0.7.255 inet6 fe80::5054:ff:fe24:cc03 prefixlen 64 scopeid 0x20<link> ether 52:54:00:24:cc:03 txqueuelen 1000 (Ethernet) RX packets 14800582 bytes 1857437496 (1.8 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15571445 bytes 4575245503 (4.5 GB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 1403230 bytes 2947650466 (2.9 GB) RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1403230 bytes 2947650466 (2.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 测试网络连通性
ping www.bai.com
- 查看tcp连接状态
netstat
netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
(base) ➜ ~ netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 macbook-pro-yue.58849 ta-in-f95.1e100..https SYN_SENT
tcp4 0 0 localhost.31181 localhost.58848 ESTABLISHED
tcp4 0 0 localhost.58848 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58815 ta-in-f95.1e100..https SYN_SENT
tcp4 0 0 localhost.31181 localhost.58814 ESTABLISHED
tcp4 0 0 localhost.58814 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58701 ta-in-f95.1e100..https SYN_SENT
tcp4 0 0 localhost.31181 localhost.58700 ESTABLISHED
tcp4 0 0 localhost.58700 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58587 116.207.137.26.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58586 ESTABLISHED
tcp4 0 0 localhost.58586 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58553 42.194.252.127.https ESTABLISHED
tcp4 0 0 macbook-pro-yue.58517 14.18.175.36.https ESTABLISHED
tcp4 0 0 macbook-pro-yue.58372 116.207.137.26.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58371 ESTABLISHED
tcp4 0 0 localhost.58371 localhost.31181 ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58369 FIN_WAIT_2
tcp4 31 0 localhost.58369 localhost.31181 CLOSE_WAIT
tcp4 0 0 macbook-pro-yue.58367 14.215.177.39.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58366 FIN_WAIT_2
tcp4 31 0 localhost.58366 localhost.31181 CLOSE_WAIT
tcp4 0 0 macbook-pro-yue.58365 14.215.177.39.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58355 ESTABLISHED
tcp4 0 0 localhost.58355 localhost.31181 ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58354 ESTABLISHED
tcp4 0 0 localhost.58354 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58324 14.215.177.39.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58323 ESTABLISHED
tcp4 0 0 localhost.58323 localhost.31181 ESTABLISHED
tcp4 0 0 macbook-pro-yue.58290 ta-in-f95.1e100..https SYN_SENT
tcp4 0 0 localhost.31181 localhost.58289 CLOSE_WAIT
tcp4 0 0 localhost.58289 localhost.31181 FIN_WAIT_2
tcp4 0 0 macbook-pro-yue.58288 119.100.50.33.https ESTABLISHED
tcp4 0 0 macbook-pro-yue.58287 119.100.50.33.https ESTABLISHED
tcp4 0 0 macbook-pro-yue.58286 119.100.50.33.https ESTABLISHED
tcp4 0 0 macbook-pro-yue.58285 119.100.50.33.https ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58284 ESTABLISHED
tcp4 0 0 localhost.58284 localhost.31181 ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58283 ESTABLISHED
tcp4 0 0 localhost.58283 localhost.31181 ESTABLISHED
tcp4 0 0 localhost.31181 localhost.58282 ESTABLISHED
tcp4 0 0 localhost.58282 localhost.31181 ESTABLISHED
4. 系统管理
-
(CentOS 6)
计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。 启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。
service 服务名 start | stop |· restart | status
# 查看网络服务状态 service network status # 停止网络服务 service network stop # 启动网络服务 service network start # 重启网络服务 service network restart
-
(CentOS 6)
设置后台服务的开机自启
# 查看所有服务器自启配置 chkconfig # 关掉指定服务的自动启动 chkconfig 服务名 off # 开启指定服务的自动启动 chkconfig 服务名 on # 查看开机启动状态 chkconfig 服务名 --list
-
(CentOS 7)
systemctl start | stop | restart | status 服务名
# 查看防火墙状态 systemctl status firewalld # 停止防火墙 systemctl stop firewalld # 启动防火墙 systemctl start firewalld # 重启防火墙 systemctl restart firewalld
systemctl list-unit-files 查看服务开机启动状态 systemctl disable service_name 关掉指定服务的自动启动 systemctl enable service_name 开启指定服务的自动启动
-
关机重启命令
在 linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
# 将数据由内存同步到硬盘中 sync # 重启 reboot # 停机(不断电) halt # 计算机将在 1 分钟后关机,并且会显示在登录用户的当前屏幕中 shutdown -h 1 ‘This server will shutdown after 1 mins’ # 立马关机(等同于 poweroff) shutdown -h now # 系统立马重启(等同于 reboot) shutdown -r now
5. 远程登录
通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。所以,远程登录工具就是必不可缺的,目前,比较主流的有 Xshell, SSH Secure Shell, SecureCRT,FinalShell, Termius等,同学 们可以根据自己的习惯自行选择.
二、实操
Shell 可以看作是一个命令解释器,为我们提供了交互式的文本控制台界面。我们可以通过终端控制台来输入命令,由 shell 进行解释并最终交给内核执行。下面是常用的shell命令。
1. 文件目录
pwd 查看当前工作目录的绝对路径
ls 列出目录的内容
cd 切换路径
mkdir 创建目录
rmdir 删除空目录
touch 创建文件
cp 复制文件或目录
rm 删除文件或目录
mv 移动文件与目录或重命名
cat 查看文件内容
more 文件内容分屏查看
less 分屏显示文本内容
echo 输出内容到控制台
head 显示文件头部内容
tail 显示文件尾部内容
ls -l > a.txt 列表的内容写入a.txt文件中(覆盖写)
ls -l >> a.txt 列表的内容写入a.txt文件中(追加写)
echo hello >> a.txt
软连接:软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。
ln -s [原文件或目录][软连接名]
history 查看历史命令
2. 时间日期
data 查看当前时间
cal 查看日历
3. 用户管理
-
useradd 添加新用户
useradd 用户名 # 添加新用户 useradd -g 组名 用户名 # 添加新用户到某个组)
-
passwd 设置用户密码
passwd 用户名 # 设置用户密码
-
id 查看用户是否存在
id 用户名 # 查看用户是否存在
-
cat /etc/passwd 查看创建了哪些用户
cat /etc/passwd
-
su 切换用户
su 用户名称 # 切换用户,只能获得用户的执行权限,不能获得环境变量 su -用户名称 # 切换到用户并获得该用户的环境变量及执行权限量
-
userdel 删除用户
userdel 用户名 # 删除用户但保留用户主目录 userdel -r 用户名 # 删除用户和用户主目录
-
who 查看登录用户信息
whoami # 显示自身用户名称 who am i # 显示登录用户的用户名以及登陆时间
-
sudo 设置普通用户具有root权限
# 创建一个普通用户 useradd user1 passwd user1 # 修改配置文件 vim /etc/sudoers
## Allow root to run any commands anywhere root ALL=(ALL) ALL user1 ALL=(ALL) NOPASSWD:ALL
# 普通用户user1可以使用sudo sudo mkdir module
-
usermod 修改用户
usermod -g 用户组 用户名
4. 文件权限
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做 了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属 的用户和组。
- 查看文件权限
root@VM-4-8-ubuntu:/etc# ls -l
total 968
drwxr-xr-x 3 root root 4096 Nov 9 19:28 acpi
-rw-r--r-- 1 root root 3028 Apr 23 2020 adduser.conf
drwxr-xr-x 2 root root 4096 Mar 25 14:18 alternatives
drwxr-xr-x 3 root root 4096 Jan 4 2021 apache2
drwxr-xr-x 3 root root 4096 Nov 9 17:01 apparmor
drwxr-xr-x 7 root root 4096 Nov 9 17:01 apparmor.d
drwxr-xr-x 3 root root 4096 Nov 9 17:02 apport
drwxr-xr-x 7 root root 4096 Nov 15 14:30 apt
-rw-r----- 1 root daemon 144 Nov 13 2018 at.deny
-rw-r--r-- 1 root root 2371 Mar 24 23:56 bash.bashrc
-rw-r--r-- 1 root root 45 Jan 26 2020 bash_completion
drwxr-xr-x 2 root root 4096 Nov 9 17:02 bash_completion.d
drwxr-sr-x 2 root bind 4096 Nov 9 17:01 bind
-rw-r--r-- 1 root root 367 Apr 15 2020 bindresvport.blacklist
1. 0首位表示类型,-代表文件,d代表目录,l代表链接文档。
2. 第1-3位确定属主(该文件的所有者)拥有该文件的权限。---User
3. 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,---Group
4. 第7-9位确定其他用户拥有该文件的权限 ---Other
- 改变文件权限
# 方式一
chmod {
u/g/o/a} {
+/-/=} {
r/w/x} 文件或目录
# 含义
u: user; g: group; o: other; a: all
r: read; w: write; x: execute
# 实例
chmod u+x a.sh
chmod a+r a.sh
chmod o-r, u-w a.sh
# 方式二
chmod [mode=421] 文件或目录
# 含义
r=4 w=2 x=1 rwx = 4+2+2 = 7
第一位为用户权限、第二位为组权限、第三位为其他用户权限
# 实例
chmod 777 a.txt
- 改变文件所有者chown
chown user1 a.sh
- 改变所属组chgrp
chown group1 a.sh
5. 搜索查找
-
find查找文件或者目录
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。
# 按照名称寻找 find local/ -name "*.txt" # 按照用户寻找 find / -user user1 # 按照文件大小查找 find /home -size +204800
-
locate快速定位文件路径
locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。
# 查询文件夹 updatedb locate tmp
-
grep过滤查找及“|”管道
管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
# grep 选项 查找内容 源文件 ls | grep -n a.txt
6. 压缩解压缩
gzip/gunzip # 压缩解压缩,不能压缩目录、不保留原文件
zip/unzip # 压缩解压缩,在linux/windows通用,可以压缩目录且保留原文件
tar [选项] xxx.tar.gz # 打包目录,压缩后的文件格式.tar.gz
-c 产.tar打包文件
-v 显示详细信息
-f 执行压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
-C 解压到执行目录
7. 磁盘分区
-
查看文件和目录占用的磁盘空间-du
du 目录/文件 # 显示目录下每个子目录的磁盘使用情况
-
查看磁盘空间使用情况-df
df 选项 # 列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况
root@VM-4-8-ubuntu:/etc# df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 394M 736K 393M 1% /run /dev/vda2 79G 4.3G 72G 6% / tmpfs 2.0G 24K 2.0G 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup tmpfs 394M 0 394M 0% /run/user/0
-
查看设备挂载情况-lsblk
lsblk # 查看设备挂载情况
-
查看分区-fdisk
fdisk -l # 查看磁盘分区详情 fdisk 硬盘设备名 # 对新增硬盘进行分区操作
8. 进程管理
-
查看当前系统进程状态-ps
ps aux | grep xxx # 查看系统中所有进程 ps -ef | grep xxx # 查看父子进程之间的关系
a # 列出所有用户进程 x # 列出当前用户所有进程 u # 面向用户友好的显示风格 -e # 列出所有进程 -u # 列出某个用户关联的所有进程 -f # 显示完整格式的进程列表
如果想查看进程的 CPU 占用率和内存占用率,可以使用aux; 如果想查看进程的父进程ID可以使用ef;
-
终止进程-kill
kill [选项]进程号 # 通过进程号杀死进程 killall 进程名称 # 通过进程名称杀死进程,也支持通配符,这在系统负载很大而变慢是很有用
-
查看进程树-pstree
pstree [选项]
-
实时监控系统进程状态-top
top - 16:12:33 up 39 days, 2:31, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 117 total, 1 running, 113 sleeping, 3 stopped, 0 zombie %Cpu(s): 0.5 us, 0.2 sy, 0.0 ni, 99.2 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 3931.2 total, 899.2 free, 880.6 used, 2151.4 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2767.3 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 61695 root 20 0 1096980 111956 30860 S 1.0 2.8 376:05.73 YDService 960 root 20 0 24600 10060 7132 S 0.3 0.2 63:55.84 tat_agent 50395 root 20 0 3705852 606064 30928 S 0.3 15.1 73:05.02 java 511515 root 20 0 494272 16860 4356 S 0.3 0.4 75:20.75 barad_agent 1 root 20 0 168504 12580 8348 S 0.0 0.3 0:33.43 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:01.51 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 10 root 20 0 0 0 0 S 0.0 0.0 0:09.97 ksoftirqd/0 11 root 20 0 0 0 0 I 0.0 0.0 3:06.57 rcu_sched 12 root rt 0 0 0 0 S 0.0 0.0 0:11.47 migration/0 13 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 16 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1 17 root rt 0 0 0 0 S 0.0 0.0 0:10.40 migration/1 18 root 20 0 0 0 0 S 0.0 0.0 0:10.34 ksoftirqd/1 20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-kblockd 21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 22 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
-
查看网络状态和端口号占用信息-netstat
netstat -anp | grep 进程号 # 查看该进程网络信息 netstat -nlp | grep 端口号 # 查看网络端口号占用情况
-a # 显示所有正在监听和未监听的套接字 -n # 拒接显示别名,能显示数字的全部转化为数字 -l # 仅列出在监听的服务状态 -p # 表示显示哪个进程在调用
-
系统定时任务
crontab [选项]
-e # 编辑crontab定时任务 -l # 查询crontab任务 -r # 删除当前用户所有的crontab任务
9. IO情况
-
查看磁盘IO读写情况
iotop iostat
三、软件包管理
1. RPM
RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe 是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。
RPM包的名称格式 Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
- “1.3.23-11”软件的版本号,主版本和此版本
- “i386”是软件所运行的硬件平台,Intel 32位处理器的统称
- “rpm”文件扩展名,代表RPM包
-
RPM查询命令
rpm -qa | grep rmp软件包 # 查看安装的rpm软件包
-
RPM卸载
rpm -e RPM软件包 # 卸载软件包并检查依赖 rpm -e --nodeps 软件包 # 卸载软件包不检查依赖
-
RPM安装
rpm -ivh RPM包全名
rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
2. YUM
YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包 并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次 次下载、安装。
YUM类似于Java开发中的Maven工具,可以从镜像网站上下载应用进程,并直接安装。
yum [选项][参数]
-y # 对所有提问都回答yes
install # 安装rpm软件包
update # 更新rpm软件包
check-update # 检查是否有可更新的rpm软件包
remove # 删除指定的rpm软件包
list # 显示软件包信息
clean # 清理过期的缓存
deplist # 显示yum软件包的所有依赖关系
yum -y install firefox
默认的系统 YUM 源,需要连接国外 apache 网站,网速比较慢,可以修改关联的网络
YUM 源为国内镜像的网站,比如网易163,aliyun 等。
# 安装wget,用wget来下载文件
yum install wget
# 在/etc/yum.repos.d/目录下,备份默认的repos文件
cd /etc/yum.repos.d
cp CentOS-Base.repo CentOS-Base.repo.backup
# 下载阿里云的repos文件
wget http://mirros.aliyun.com/repo/Centos-7.repo
# 替换repos文件
mv Centos-7.repo CentOS-Base.repo
# 清理就缓存数据,缓存新数据
yum clean all
yum makecache
四、Shell编程
1. 入门
创建一个脚本,并执行。
touch test.sh
vim test.sh
#!/bin/bash
echo "helloworld"
bash ./test.sh
也可以直接执行,但是要先授予权限
chmod +x test.sh
test.sh
2. 变量
-
常用系统变量
H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等
-
案例实操
echo $HOME # 显示当前shell中所有变量:set set
-
自定义变量
定义变量:变量名=变量值
撤销变量:unset 变量名
声明静态变量:readonly 变量,注意:不能 unset
# 声明A变量并重新赋值,撤销 A=5 echo $A 5
A=8 echo $A 8
unset A echo $A
# 变量默认类型都是字符串 C=1+2 echo $C 1+2
# 变量的值如果有空格,需要使用双引号或单引号括起来 D='I love you' echo $D I love you
# 可以把变量提升为全局环境变量,可供其他shell程序使用 export 变量名
-
特殊变量、参数传递
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如${10}).
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性).
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。) ./test.sh echo $? 0
3. 运算符
基本语法: ( ( 运 算 式 ) ) 或 ((运算式))或 ((运算式))或[运算式]
# 计算(2+3)* 4
S=$[(2+4)*4]
echo $S
4. 条件控制
基本语法:test condition或[ condition ]
常用判断条件
# 两个正数之间比较
-eq equal
-lt less than
-gt greater than
-ne not equal
-le less equal
-ge greater equal
# 按照文件权限进行判断
-r
-w
-x
# test.sh是否有执行权限
[ -x test.sh ]
echo $?
# 按照文件类型判断
-e 文件存在
-f 文件存在并且是一个常规的文件
-d 文件存在并且是一个目录
5. 流程控制
-
if
if condition1 then command1 elif condition2 then command2 else commandN fi
-
case
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
-
for
for var in item1 item2 ... itemN do command1 command2 ... commandN done
-
while
while condition do command done
6. 函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:
[ function ] funname [()]
{
action;
[return int;]
}
实例
funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." 标签:
kk系列连接器