Linux基础Shell脚本完整实操教程

Linux基础Shell脚本完整实操教程
前言本文基于Shell脚本入门课程完整实操整理覆盖多命令串联、脚本创建运行、变量使用、文本统计、数值运算、脚本退出状态六大核心模块所有命令均可在Xshell、VMware Linux虚拟机中复现附带完整脚本源码与操作逻辑适合新手搭建Shell基础知识框架。一、多条Shell命令组合执行日常操作中我们可以把多条命令一次性提交给终端执行分为分号分隔、管道传递两种方式二者执行逻辑有明显区别。分号; 顺序执行多条命令同一行内多条命令用分号隔开程序会从上到下完整执行每一条命令每条命令都会输出自身全部结果。典型示例 date ; who先打印系统当前时间再输出当前登录系统的所有用户信息两条命令的输出内容都会完整展示在控制台。管道符 | 传递输出流管道符会把前一条命令的输出内容直接当作后一条命令的输入数据终端仅展示最后一条命令的输出不会打印中间命令结果。示例 date | whodate命令的输出会传递给who处理控制台只输出用户登录信息。二、Shell脚本文件创建与两种运行方式脚本文件规范创建脚本文件统一使用后缀.sh命名通过vim编辑器新建文件文件第一行必须添加解释器声明 #!/bin/bash。单独的#代表单行注释系统不会执行该行内容#!是特殊标识用于告知操作系统使用bash解析当前脚本。基础示例脚本test.sh完整内容#!/bin/bash该脚本作用打印系统时间与登录用户datewho2. 两种脚本运行方案方案一bash命令直接调用无需权限执行格式 bash test.shbash程序会直接读取脚本内所有命令执行不受文件读写执行权限限制新手调试脚本推荐使用该方式。方案二文件路径直接运行必须赋予可执行权限可以使用相对路径./test.sh也可以填写文件完整绝对路径运行脚本。未添加权限时执行会提示Permission denied权限不足。权限处理命令chmod ux test.sh给文件所属用户增加可执行权限执行ls -l test.sh可查看权限字段出现x字符即代表权限添加成功添加权限后即可使用./test.sh正常运行脚本。三、echo输出自定义文本信息echo是脚本中最常用的打印输出命令用来自定义提示文字区分两种使用形式echo “文本内容”打印文字后自动换行多条echo命令输出会分行展示。echo -n “文本内容”输出文字末尾不换行后续命令的打印内容会和当前文字拼接在同一行。改造后的带提示文字脚本示例#!/bin/bashecho -n “当前系统时间”dateecho “当前登录系统的用户信息”who运行后时间文字和时间打印在同一行用户提示文字和登录信息分行展示交互可读性更强。四、脚本变量全用法详解变量用于临时存储数据分为系统环境变量、自定义局部变量、命令替换变量三类统一使用$符号读取变量值。系统自带环境变量系统预定义全局变量常用有USER代表当前登录用户名UID代表用户IDHOME代表用户家目录。如果需要原样输出符号而不解析变量在前添加反斜杠\转义例如$HOME控制台会直接打印字符串HOME不会读取家目录路径。自定义局部变量变量名支持字母、数字、下划线组合区分大小写总长度不超过20位赋值时等号左右绝对不能添加空格。自定义变量仅在当前脚本内部生效脚本执行结束后外部终端无法读取该变量。自定义变量示例name1“Tom”day15echo “$name1 登录系统距今 $day1 天”3. 命令替换将命令执行结果存入变量可以把一条命令的输出结果保存到变量中后续脚本任意位置调用提供两种等效写法推荐$()格式可读性更高第一种反引号包裹date第二种美元括号格式(date)实操场景利用date命令生成带年月日的日志文件名datelogname(date) 实操场景利用date命令生成带年月日的日志文件名date %y%m%d会输出两位年份、两位月份、两位日期拼接生成唯一日志文件。 log_name(date)实操场景利用date命令生成带年月日的日志文件名datelogn​ame(date %y%m%d)touch log.$log_name.test.sh五、wc文本统计命令wc用于统计文本内容默认输出三段数据依次是文件总行数、单词总数、字节总数。核心参数-l仅统计文件行数输出结果只展示数字和文件名。搭配通配符*可批量统计当前目录下所有.sh文件行数末尾会汇总所有文件总行数适合批量统计脚本代码量。六、Shell脚本数学运算整数浮点bash原生仅支持整数运算小数浮点运算需要借助bc计算器工具共三种运算写法。expr老式整数运算数字、运算符之间必须添加空格*乘号、括号等特殊符号需要用\反斜杠转义否则会报语法错误。示例 expr 5 * 2。$[] 与 $(( )) 简洁整数运算推荐两种格式用法完全一致无需转义特殊符号运算符前后可不用空格支持括号运算优先级也可直接嵌入变量计算。练习题运算脚本源码#!/bin/bashresult1[100∗(50−45)]result2[100*(50-45)] result2[100∗(50−45)]result2((100*(50-45)))result3[100/52]echo括号运算100∗(50−45)结果[100/52] echo 括号运算100*(50-45)结果[100/52]echo括号运算100∗(50−45)结果result1echo “整数除法100/52结果$result3”bash整数除法会直接舍弃小数部分100除以52最终输出1。bc计算器实现浮点小数运算交互式使用终端直接输入bc进入计算程序输入quit退出计算器exit命令无法关闭bc。默认只输出整数添加scale数字可设置保留小数位数scale4代表保留四位小数。脚本内调用bc借助管道符传递运算表达式给bc格式为 变量KaTeX parse error: Expected EOF, got # at position 74: …会生效。 浮点运算示例脚本 #̲!/bin/bash floa…(echo “scale4;100/52” | bc)echo “100除以52保留四位小数$float_res”七、脚本退出状态码与exit自定义返回值每一条Linux命令执行完成后都会生成0~255区间的整数状态码用于标识命令执行结果特殊变量KaTeX parse error: Expected EOF, got # at position 136: …码。 自定义退出码示例脚本 #̲!/bin/bash exit…exit_codeexit $exit_code脚本运行结束后终端输入echo $?控制台会打印我们自定义的数字5。八、完整学习知识框架梳理命令组合分号顺序执行、管道传递输出流实现多命令批量操作脚本基础.sh文件创建首行#!/bin/bash声明解释器两种运行方式与可执行权限配置输出打印echo打印提示文字echo -n实现不换行输出变量体系系统环境变量、自定义局部变量、$()/反引号命令替换存储命令结果文本统计wc基础统计wc -l单独统计文件代码行数数值计算expr老式整数运算[]/(( ))简洁整数运算bc管道实现浮点小数运算程序退出$?读取命令状态码exit自定义脚本退出返回值。