帮你精通Shell脚本编程:构筑程序基石的7项基本元素
此系列课程的 Shell 适用bash和zsh。
➜ ~ bash --version |grep version
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
➜ ~ zsh --version
zsh 5.8 (x86_64-ubuntu-linux-gnu)
1.数学表达式
学习编程,我们本能的起点自然是如何进行数学运算,如何处理数学表达式。在bash中,实现这一点稍微有些繁琐,我们需要将表达式放入到 $((...))中。
echo $(( 60*60*24 )) #计算一天有多少秒
86400
先暂且不理会$((...))的具体含义,先记着需要将我们所熟知的数学表达式嵌入其中即可,因为如果直接键入数学表达式,会当场报错。
$ 56 + 72
56 + 72
56: command not found
再看一个复合表达式:
$ echo $(( (3+5+7) * (2+(4*6)) ))
echo $(( (3+5+7) * (2+(4*6)) ))
390
作为shell-script的第一步,现在我们知道,终端就是一个便携的计算器。
2.命名与变量
我们的记忆力有限,不大容易记住一长串的数字或者一段程序。编程语言为此提供的核心解决途径就是命名。命名的方式简单直接。
$ radius=5 # 注意等号两侧不能有空格
radius=5
读取变量的时候,则需要前缀 $将其解索引:
$ echo The radius is $radius.
The radius is 5.
接下来,我们计算圆的面积:
$ radius=5; pi=3; area=$(( $pi*$radius**2 )); echo $area
75
于是我们可以直接用抽象的名字进行数学运算。
3.常量与环境变量
我们可以命名变量,但是变量的取名并非完全自由,不能与系统的环境变量相冲突。比如查看当前bash的进程号:
$ echo $BASHPID
15190
查阅完整的进程树:
$ pstree -asp $BASHPID
systemd,1 splash
└─tmux: server,2628 new -s spirit
└─bash,2629
└─bash,15190 -v
└─pstree,26568 -asp 15190
倘若好奇系统中有多少环境变量,应该求问env或者printenv命令:
$ env | nl | tail -n 5
87 DBUS_SESSION_BUS_ADDRESS=unix:path=http://www.ym97.com/run/user/1000/bus
88 MAIL=http://www.ym97.com/var/mail/gaowei
89 LC_NUMERIC=en_US.UTF-8
90 KONSOLE_DBUS_WINDOW=http://www.ym97.com/Windows/1
91 _=http://www.ym97.com/usr/bin/env
如结果所示,当前系统中有91个环境变量。
4.函数
与变量相比较,函数是更为强大更具表现力的抽象工具。我们可以将 function 当作执行特定任务的‘黑匣子’。函数的的语法为:
function function_name {
command...
}
或者
function_name () {
command...
}
函数的应用,我们还是从熟悉的简单数学运算出发,求给定数的平方。
$ function square {
echo $(( $1 ** 2 ))
}
函数体中$1是新鲜事物,乃是指代第一个参数的位置参数,应用这个函数:
$ square 11
121
$ square 121
14641
5.条件语句
到目前为止,我们定义的程序表达力expressive-power极为有限。因为我们尚且没有途径做出种种测试,并根据测试的不同结果来决定下一步的操作,也就是赋予程序以智能。
此时,我们需要引入条件判断,基本结构为:
if commands; then
commands
[elif commands; then
commands...]
[else
commands]
fi
我们尝试求绝对值的函数:
function abs {
if (( $1 > 0 )); then echo $1
elif (( $1 = 0 )); then echo 0
else echo $(( -$1 ))
fi
}
测试新定义的abs函数:
abs -110
110
除了三项简单的逻辑判断符号 <>=之外,还可以使用复合逻辑操作符:
$ command1 && command2 # and 逻辑
$ command1 || command2 # or 逻辑
$ ! # not
6.循环结构
Looping结构,首先想到的当然是 for 语句:
$ for i in *; do echo $i; done
anaconda3
backup.doom.d
backup.gnus.el
$ for i in {A..E}; do echo $i; done
A
B
C
D
E
以及 while 语句
count=1
while [[ "$count" -le 5 ]]; do
echo "$count"
count=$((count + 1))
done
echo "Finished."
7.读取键盘输入
程序极为重要的一点是与用户的沟通与互动。我最爱用read取代xargs,例如这样的结构:
find . -iname "*.pdf" | while read line; do something
Read 有多个有意思的参数,首先是-p,prompt
read -p "Enter one or more values.>"
echo "REPLY = '$REPLY'"
其次 -t 限定用户的反馈时间:
read -t 10 -p "Enter secret passphrase"
8.收尾总结
本文我们探讨了 ShellScript的七项基本元素:
数学表达式
变量与命名
常量与环境变量
函数
条件语句
循环语句
Read
原文地址:https://www.toutiao.com/i6904424219946271244/
相关热词: shell
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/shell/9257.shtml
相关文章
热门TAG
命令 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 技巧 权重 服务器 网站流量 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows 蜘蛛 搜索引擎 网站收录 JSP 实例解析最新文章
-
PHP生成奖状
时间:2021-01-06
-
python实现输入五个数并求
时间:2021-01-06
-
php检测网站是否正常打开
时间:2021-01-05
-
python怎么右对齐
时间:2021-01-05
-
Python3爬虫入门之Python3的安
时间:2021-01-05
-
如何用PHP接收http请求头信
时间:2021-01-05
-
数据库怎么连接用php写的
时间:2021-01-05
-
php后缀怎么打开
时间:2021-01-05
热门文章
-
解析shell字段分隔符的用法(图文)
时间:2020-12-22
-
Python3爬虫进阶:MongoDB存储(非关系型数
时间:2020-12-29
-
如何在Linux或者UNIX下调试Bash Shell脚本
时间:2020-12-22
-
关于php中匿名函数与回调函数的详解
时间:2020-12-29
-
php文档怎么打开
时间:2020-12-29
-
php检测网站是否正常打开
时间:2021-01-05
-
PHP PHP_EOL 换行符
时间:2020-12-29
-
python实现输入五个数并求平均值
时间:2021-01-06
-
浅谈Linux Shell的管道与重定向
时间:2020-12-23
-
如何检测Django是否安装成功
时间:2020-12-29
