ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux软件编程基础:操作系统、Shell与脚本编程

Linux软件编程基础:操作系统、Shell与脚本编程 1. 操作系统概述操作系统是一款软件其核心作用是屏蔽底层不同的硬件平台为上层应用提供统一的接口从而实现通用的软件代码。PC三大操作系统Unix世界上第一款操作系统LinuxGNUGNUs Not Unix项目的重要组成部分使用C语言编写广泛应用于服务器和嵌入式领域Windows使用C/C开发2. Linux操作系统2.1 Linux内核五大功能内存管理多任务调度文件系统管理Linux系统中一切皆是文件多任务间的通信网络通信2.2 Linux内核特点Linux内核是由系统调用组成的一些纯C代码不允许与用户直接交互内核功能复杂不容易被调用所以通过shell编写一系列命令来完成内核功能命令解释器2.3 Shell作用保护内核命令解释器2.4 库函数库函数是对系统调用的封装能够处理一些复杂的应用场景系统调用是Linux内核中的函数接口只有在Linux系统中才能使用功能强大但十分简练库函数可以移植所以具有通用性3. Shell基础命令3.1 基础命令ls- 列出目录内容文件类型bblock 块设备文件ccharacter 字符设备文件ddirectory 目录文件-普通文件llink 链接文件ssocket 套接字文件ppipe 管道文件touch- 创建文件rm- 删除文件mkdir- 创建文件夹mkdir dirname ls -l ls -armdir- 删除空文件夹rm -rf- 删除非空文件夹cp- 拷贝文件如果拷贝目录文件需要加 -rf选项mv- 移动文件3.2 文件查看命令cat- 查看文件内容more/less- 分页查看文件head/tail- 查看文件开头/结尾head/tail -n 行数 文件名3.3 文件查找find- 在当前目录下找与文件名对应的文件路径find . -name 文件名grep- 打印出文件名中所有与字符串匹配的行grep 字符串 文件名3.4 通配符*匹配任意长度任意字符的文件名?匹配一位长度任意字符的文件名[]匹配一位长度指定字符的文件名file_*.txt file_??.txt file_[1,3,5].txt file_[1-5].txt file_[^6].txt3.5 组合命令管道- 将前面命令的输出作为后续命令的输入ps -ef | grep bash重定向- 将前面命令的输出重定向到文件中覆盖重定向追加重定向ps -ef file.txt练习在/usr/include/stdio.h文件中的后200行找到和extern相关的内容并把这些内容所在的行记录到file.txt文件中使用一条shell命令实现tail -n 200 /usr/include/stdio.h | grep extern file.txt3.6 其余常用命令echo- 将内容显示在终端history- 查看终端输入过的历史命令du- 查看文件大小du -m 文件名/目录名 du -k 文件名/目录名od- 按照指定的方式查看文件中的内容od -c file.txtdate- 查看时间和日期uname- 查看内核版本、平台架构uname -aifconfig- 查看网卡信息ping- 测试主机与指定IP地址是否能够网络连通3.7 软件包管理工具dpkg工具集安装软件sudo dpkg -i 软件包名.deb卸载软件sudo dpkg -P 软件名查看安装是否成功dpkg -l 软件名apt-get工具集一定有网设置apt-get工具集的源下载并安装软件sudo apt-get install 软件名卸载软件sudo apt-get remove 软件名 --purge4. Shell编程4.1 编程语言类型对比特性编译型语言解释型语言数据类型有丰富的数据类型所有内容都是字符串执行方式先编译再执行边翻译边执行执行速度执行速度快执行速度慢开发效率开发效率低开发效率高适用场景数据的运算和处理系统的开发和维护4.2 Shell脚本编写步骤打开文件并编写代码vim filename.sh加上执行权限chmod x filename.sh运行脚本./filename.shShell脚本本质就是一系列shell命令的集合4.3 Shell中的变量环境变量PWD、HOME、PATH位置变量$0文件名$1给脚本传参的第一个参数$2第二个参数$3第三个参数$4第四个参数$#传入参数个数$$脚本运行时的进程ID号$?上一条shell语句执行的结果自定义变量变量名值4.4 Shell中的引号双引号打印时会替换成变量的值单引号打印单引号中的内容不变倒引号将引号内部的内容作为一个命令使用4.5 Shell脚本中的输入和输出echo- 输出read- 输入4.6 分支语句if分支语句if 判断条件 then # 条件成立时执行的语句 else # 条件不成立时执行的语句 ficase分支语句case 变量名 in 值1) 语句 ;; 值2) 语句 ;; 值3) 语句 ;; *) 语句 ;; esac4.7 循环语句while循环while循环在条件为真时重复执行语句块while 条件 do 语句 done示例#!/bin/bash count1 while [ $count -le 5 ] do echo 循环次数: $count count$((count 1)) donefor循环for循环用于遍历列表中的每个元素for 变量 in 列表 do 语句 done三种常见用法# 方式1直接列出值 for i in 1 2 3 4 5 do echo 数字: $i done 方式2使用大括号扩展 for i in {1..100} do echo 数字: $i done 方式3使用seq命令生成序列 for i in seq 100 do echo 数字: $i done4.8 数组Shell支持一维数组数组元素用空格分隔# 定义数组 array(元素1 元素2 元素3) 访问数组元素 echo ${array[0]} # 输出第一个元素 echo ${array[1]} # 输出第二个元素 获取数组长度 echo ${#array[]} 遍历数组 for item in ${array[]} do echo $item done 修改数组元素 array[0]新元素 添加数组元素 array[${#array[]}]新元素4.9 函数Shell函数用于封装可重用的代码块# 函数定义 函数名() { 语句 [return 返回值] } 或者 function 函数名 { 语句 [return 返回值] } 函数调用 函数名 参数1 参数2 ... 获取函数返回值 函数名 echo $? # 获取函数返回值示例#!/bin/bash 定义函数 say_hello() { echo Hello, $1! return 0 } 调用函数 say_hello World 带返回值的函数 add() { local sum$(( $1 $2 )) return $sum } add 10 20 echo 10 20 $?函数参数说明$1第一个参数$2第二个参数$#参数个数$所有参数列表$*所有参数作为一个字符串5. 作业练习从终端接收一个文件名或路径打印该文件的类型从终端接收一个文件名如果该文件名为qianrushi则处理该文件如果文件名不为qianrushi则无需做任何处理处理方式为如果该文件已经存在则创建一个tmp文件夹并在文件夹下新建quanrushi.txt文件如果文件不存在则直接创建从终端输入一个成绩使用case打印出成绩的级别90 - 100打印优秀80 - 89打印良好70 - 79打印中等60 - 69打印及格60以下打印不及格
返回列表