shell脚本基本命令_Shell脚本编程第一课:构成程序的7个基本元素

0d6ed4f1166198def265e45cc3761c91.png

此系列课程的 Shell 特指Bourne Again shell(bash)

$ bash --versionbash --versionGNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu

1.数学表达式

学习编程,我们本能的起点自然是如何进行数学运算,如何处理数学表达式。在bash中,实现这一点稍微有些繁琐,我们需要将表达式放入到 $((...))中。

echo $(( 60*60*24 )) #计算一天有多少秒86400

先暂且不理会$((...))的具体含义,先记着需要将我们所熟知的数学表达式嵌入其中即可,因为如果直接键入数学表达式,会当场报错。

$ 56 + 7256 + 7256: 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 $area75

于是我们可以直接用抽象的名字进行数学运算。

3.常量与环境变量

我们可以命名变量,但是变量的取名并非完全自由,不能与系统的环境变量相冲突。比如查看当前bash的进程号:

$ echo $BASHPID15190

查阅完整的进程树:

$ pstree -asp $BASHPIDsystemd,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=/run/user/1000/bus    88  MAIL=/var/mail/gaowei    89  LC_NUMERIC=en_US.UTF-8    90  KONSOLE_DBUS_WINDOW=/Windows/1    91  _=/usr/bin/env

如结果所示,当前系统中有91个环境变量。

4.函数

与变量相比较,函数是更为强大更具表现力的抽象工具。我们可以将 function 当作执行特定任务的‘黑匣子’。函数的的语法为:

function function_name {command...}  或者function_name () {command...} 

函数的应用,我们还是从熟悉的简单数学运算出发,求给定数的平方。

$ function square {     echo $(( $1 ** 2 ))}

函数体中$1是新鲜事物,乃是指代第一个参数的位置参数,应用这个函数:

$ square 11121$ square 12114641

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 -110110 

除了三项简单的逻辑判断符号 <>=之外,还可以使用复合逻辑操作符:

    $ command1 && command2 # and 逻辑    $ command1 || command2 # or 逻辑    $ ! # not

6.循环结构

Looping结构,首先想到的当然是 for 语句:

$ for i in *; do echo $i; doneanaconda3backup.doom.dbackup.gnus.el$ for i in {A..E}; do echo $i; doneABCDE

以及 while 语句

count=1while [[ "$count" -le 5 ]]; do          echo "$count"          count=$((count + 1))doneecho "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.收尾总结

本文我们探讨了 bash-script 的七项基本元素:

  1. 数学表达式
  2. 变量与命名
  3. 常量与环境变量
  4. 函数
  5. 条件语句
  6. 循环语句
  7. Read

以上,第一课完结。

a23ec3b864457ea859cc841b4260b6a4.png

点击“了解更多”可访问所属Github项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值