当前位置: 首页 > 科技观察

助你掌握Shell脚本编程:构建程序基石的7个基本要素

时间:2023-03-13 18:16:10 科技观察

本系列课程的Shell适用于bash和zsh。?~bash--version|grepversionGNUbash,version5.0.17(1)-release(x86_64-pc-linux-gnu)?~zsh--versionzsh5.8(x86_64-ubuntu-linux-gnu)1.数学表达式学习编程,我们本能的出发点自然是如何进行数学运算,如何处理数学表达式。在bash中,这有点繁琐,我们需要将表达式放在$((...))中。echo$((60*60*24))#计算一天有多少秒86400我们先忽略$((...))的具体含义,首先记住我们要嵌入我们熟悉的数学表达式with,因为如果直接敲数学表达式,会当场报错。$56+7256+7256:commandnotfound再看一个复合表达式:$echo$(((3+5+7)*(2+(4*6))))echo$(((3+5+7)*(2+(4*6))))390作为shell-script的第一步,现在我们知道终端是一个便携式计算器。2.命名和变量我们的记忆力是有限的,要记住一长串数字或一个程序并不容易。编程语言为此提供的核心解决方案就是命名。命名方式简单明了。$radius=5 #注意等号radius=5两边不能有空格,读取变量时需要前缀$对其进行索引:$echoTheradiusis$radius.Theradiusis5。接下来我们计算圆的面积:$radius=5;pi=3;area=$(($pi*$radius**2));echo$area75这样我们就可以直接使用抽象名称进行数学运算.3、常量和环境变量我们可以给变量命名,但是变量的命名并不是完全自由的,不能和系统环境变量冲突。例如查看当前bash进程号:$echo$BASHPID15190查看完整进程树:$pstree-asp$BASHPIDsystemd,1splash└─tmux:server,2628new-sspirit└─bash,2629└─bash,15190-v└─pstree,26568-asp15190如果你对系统中的环境变量数量感到好奇,你应该问env或printenv命令:$env|nl|tail-n587DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus88MAIL=/var/mail/gaowei89LC_NUMERIC=en_US.UTF-890KONSOLE_DBUS_WINDOW=/Windows/191_=/usr/bin/env结果显示,当前系统共有91个环境变量。4、与变量相比,函数是更强大、更富表现力的抽象工具。我们可以将函数视为执行特定任务的“黑匣子”。函数的语法为:functionfunction_name{command...}orfunction_name(){command...}函数的应用,我们还是从熟悉的简单数学运算开始,求给定数的平方。在$functionsquare{echo$(($1**2))}函数体中,$1是一个新奇的东西,它指的是第一个参数的位置参数。应用这个函数:$square11121$square121146415。条件语句到目前为止,我们定义的程序的表达能力是极其有限的。因为我们还没有办法进行各种测试,根据测试的不同结果来决定下一步的操作,也就是赋予程序智能。此时需要引入条件判断,基本结构为:ifcommands;thencommands[elifcommands;thencommands...][elsecommands]fi我们尝试求函数的绝对值:functionabs{if(($1>0));thenecho$1elif(($1=0));thenecho0elseecho$((-$1))fi}测试新定义的abs函数:abs-110110除了<>=这三个简单的逻辑判断符号,还可以使用复合逻辑运算符:$command1&&command2#andlogic$command1||command2#orlogic$!#not6。循环结构,首先想到的当然是for语句:$foriin*;doecho$i;doneanaconda3backup.doom.dbackup.gnus.el$foriin{A..E};doecho$i;doneABCDEandwhilestatementcount=1while[["$count"-le5]];doecho"$count"count=$((count+1))doneecho"Finished."7。读取键盘输入的程序中极其重要的一点就是与用户的沟通和交互。我喜欢用read代替xargs,比如这个结构:find.-iname"*.pdf"|whilereadline;dosomethingRead有很多有趣的参数,第一个是-p,promptread-p"Enteroneormorevalues.>"echo"REPLY='$REPLY'"后接-t来限制用户的反馈时间:read-t10-p"Entersecretpassphrase"8.结论在本文中,我们讨论了ShellScript的七个基本元素:数学表达式变量和命名常量以及环境变量函数条件语句循环语句阅读【编辑推荐】学Python做SEO,分享7个技巧,助你做数据分析。国内热门浏览器:市场占有率高达58%,全球超过10亿人在使用Windows10.5必备软件,让你的电脑更有用,请低调使用部署生产级Kubernetes应用Phaser并发编程原理与应用