资讯详情

Linux编程基础

一、基础

1. 文件和目录结构

Linux系统中的一切都是文件,根目录是/,下面有/root、/bin、/boot、/dev、/usr各目录的作用如下:

fbeffb9c5eac725de241005d22f72bbe.png

/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有三种常见模式:

  1. 正常模式

    在正常模式下, 我们可以使用快捷键。

    以vim打开文档直接进入一般模式(这是默认模式)。在此模式下, 你可以使用『上下左右』 按键移动光标, 你可以使用『删除字符』 或『删除整行』 处理档案内容, 也可以使用『复制、 贴上』 处理您的文件数据.

  2. 编辑模式

    在模式下, 程序员可以输入内容。 按下 i, I, o, O, a, A, r, R 在进入编辑模式之前,等待任何字母, 一般来说按 i 即可。

  3. 命令行模式

    在这种模式下, 您可以提供相关指令, 完成读取、 存盘、 替换、 离开 vim 、 在这种模式下实现了显示行号等动作!

    vim常用命令

3. 网络配置

网络常用配置:

  1. 查看所有网络接口的配置信息
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
  1. 测试网络连通性
ping www.bai.com
  1. 查看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. 系统管理

  1. (CentOS 6)

    计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。 启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。

    service 服务名 start | stop |· restart | status
    
    # 查看网络服务状态
    service network status
    # 停止网络服务
    service network stop
    # 启动网络服务
    service network start
    # 重启网络服务
    service network restart
    
  2. (CentOS 6)

    设置后台服务的开机自启

    # 查看所有服务器自启配置
    chkconfig
    # 关掉指定服务的自动启动
    chkconfig 服务名 off
    # 开启指定服务的自动启动
    chkconfig 服务名 on
    # 查看开机启动状态
    chkconfig 服务名 --list
    
  3. (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 开启指定服务的自动启动
    
  4. 关机重启命令

    在 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. 用户管理

  1. useradd 添加新用户

    useradd 用户名 # 添加新用户
    useradd -g 组名 用户名 # 添加新用户到某个组)
    
  2. passwd 设置用户密码

    passwd 用户名 # 设置用户密码
    
  3. id 查看用户是否存在

    id 用户名 # 查看用户是否存在
    
  4. cat /etc/passwd 查看创建了哪些用户

    cat /etc/passwd
    
  5. su 切换用户

    su 用户名称 # 切换用户,只能获得用户的执行权限,不能获得环境变量
    su -用户名称 # 切换到用户并获得该用户的环境变量及执行权限量
    
  6. userdel 删除用户

    userdel 用户名 # 删除用户但保留用户主目录
    userdel -r 用户名 # 删除用户和用户主目录
    
  7. who 查看登录用户信息

    whoami # 显示自身用户名称
    who am i # 显示登录用户的用户名以及登陆时间
    
  8. 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
    
  9. usermod 修改用户

    usermod -g 用户组 用户名
    

4. 文件权限

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做 了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属 的用户和组。

  1. 查看文件权限
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
  1. 改变文件权限
# 方式一
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
  1. 改变文件所有者chown
chown user1 a.sh
  1. 改变所属组chgrp
chown group1 a.sh

5. 搜索查找

  1. find查找文件或者目录

    find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。

    # 按照名称寻找
    find local/ -name "*.txt"
    # 按照用户寻找
    find / -user user1
    # 按照文件大小查找
    find /home -size +204800
    
  2. locate快速定位文件路径

    locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。

    # 查询文件夹
    updatedb
    locate tmp
    
  3. 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. 磁盘分区

  1. 查看文件和目录占用的磁盘空间-du

    du 目录/文件 # 显示目录下每个子目录的磁盘使用情况
    
  2. 查看磁盘空间使用情况-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
    
  3. 查看设备挂载情况-lsblk

    lsblk # 查看设备挂载情况
    
  4. 查看分区-fdisk

    fdisk -l # 查看磁盘分区详情
    fdisk 硬盘设备名 # 对新增硬盘进行分区操作
    

8. 进程管理

  1. 查看当前系统进程状态-ps

    ps aux | grep xxx # 查看系统中所有进程
    ps -ef | grep xxx # 查看父子进程之间的关系
    
    a # 列出所有用户进程
    x # 列出当前用户所有进程
    u # 面向用户友好的显示风格
    -e # 列出所有进程
    -u # 列出某个用户关联的所有进程
    -f # 显示完整格式的进程列表
    

    如果想查看进程的 CPU 占用率和内存占用率,可以使用aux; 如果想查看进程的父进程ID可以使用ef;

  2. 终止进程-kill

    kill [选项]进程号 # 通过进程号杀死进程
    killall 进程名称 # 通过进程名称杀死进程,也支持通配符,这在系统负载很大而变慢是很有用
    
  3. 查看进程树-pstree

    pstree [选项]
    
  4. 实时监控系统进程状态-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             
    
  5. 查看网络状态和端口号占用信息-netstat

    netstat -anp | grep 进程号 # 查看该进程网络信息
    netstat -nlp | grep 端口号 # 查看网络端口号占用情况
    
    -a # 显示所有正在监听和未监听的套接字
    -n # 拒接显示别名,能显示数字的全部转化为数字
    -l # 仅列出在监听的服务状态
    -p # 表示显示哪个进程在调用
    
  6. 系统定时任务

    crontab [选项]
    
    -e # 编辑crontab定时任务
    -l # 查询crontab任务
    -r # 删除当前用户所有的crontab任务
    

9. IO情况

  1. 查看磁盘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包
  1. RPM查询命令

    rpm -qa | grep rmp软件包 # 查看安装的rpm软件包
    
  2. RPM卸载

    rpm -e RPM软件包 # 卸载软件包并检查依赖
    rpm -e --nodeps 软件包 # 卸载软件包不检查依赖
    
  3. 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. 变量

  1. 常用系统变量

    H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等

  2. 案例实操

    echo $HOME
    # 显示当前shell中所有变量:set
    set
    
  3. 自定义变量

    定义变量:变量名=变量值

    撤销变量: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 变量名
    
  4. 特殊变量、参数传递

    $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. 流程控制

  1. if

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    
  2. case

    case 值 in
    模式1)
        command1
        command2
        ...
        commandN
        ;;
    模式2)
        command1
        command2
        ...
        commandN
        ;;
    esac
    
  3. for

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    
  4. while

    while condition
    do
        command
    done
    

6. 函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

shell中函数的定义格式如下:

[ function ] funname [()]

{ 
        

    action;

    [return int;]

}

实例

funWithReturn(){ 
        
    echo "这个函数会对输入的两个数字进行相加运算..."
    
        标签: kk系列连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台