Linux中的shell编程入门系列

shell介绍

  • 什么是shell
    与Linux交互的命令行界面
    内圆描述了操作系统的核心(比如 LinuxKernel ),而 Shell 和 GUI 一样作为用户和操作系统之间的接口。
    在这里插入图片描述

Shell 作为一种用户接口,它实际上是一个能够解释和分析用户键盘输入,执行输入中的命
令,然后返回结果的一个解释程序(Interpreter,例如在 linux 下比较常用的 Bash )该解释程序不仅能够解释简单的命令,而且可以解释一个具有特定语法结构的文件,这种文
件被称作脚本(Script)。

  • 常用shell
    bash
  • 如何查看自己的默认shell
    可以直接输入env查看SHELL
    也可以打印SHELL变量来查看
root@DESKTOP-QRQH8GS:~# env | grep SHELL
SHELL=/bin/bash
root@DESKTOP-QRQH8GS:~# echo $SHELL
/bin/bash
  • 如何更换shell
    终端命令:chsh -s /bin/bash
    chsh == change shell

shell编程

hello world

#!/bin/bash -v
# test.sh
echo "Hello, World"
  • #!/bin/bash -v
  1. 该行告诉操作系统使用用 #! 符号之后面的解释器以及相应的参数来解释该脚本文件
  2. -v 刚好就是要打印程序的源代码

shell数值运算常用范例

给变量自动加一


$ i=0;
$ ((i++))
$ echo $i
1
$ let i++
$ echo $i
2
$ expr $i + 1
3
$ echo $i
2
$ echo $i 1 | awk '{printf $1+$2}'
3

如果进行乘法运算,需要对运算符进行转义,否则 Shell 会把乘号解释为通配符,导致语法错误

(()) 的运算效率最高。而let 作为 Shell内置命令,效率也很高,
但是 exprbcawk 的计算效率就比较低。所以,在 Shell 本身能够完成相关工作的情
况下,建议优先使用 Shell 本身提供的功能。但是 Shell 本身无法完成的功能,比如浮点运
算,所以就需要外部命令的帮助。另外,考虑到 Shell 脚本的可移植性,在性能不是很关键的
情况下,不要使用某些 Shell 特有的语法。

用 Shell 的内置命令查看各个命令的类型如下:

$ type type
type is a shell builtin
$ type let
let is a shell builtin
$ type expr
expr is hashed (/usr/bin/expr)
$ type bc
bc is hashed (/usr/bin/bc)
$ type awk
awk is /usr/bin/awk

从1加到某数


#!/bin/bash
# calc.sh
i=0;
while [ $i -lt 10000 ]
do
((i++))
done
echo $i

求模

$ expr 5 % 2
1
$ let i=5%2
$ echo $i
1
$ echo 5 % 2 | bc
1
$ ((i=5%2))
$ echo $i
1

求幂

$ let i=5**2
$ echo $i
25
$ ((i=5**2))
$ echo $i
25
$ echo "5^2" | bc
25

进制转换
进制转换也是比较常用的操作,可以用 Bash的内置支持也可以用bc 来完成,例如把 8 进
制的 11 转换为 10 进制,则可以:

$ echo "obase=10;ibase=8;11" | bc -l
9
$ echo $((8#11))
9

上面都是把某个进制的数转换为 10 进制的,如果要进行任意进制之间的转换还是 bc 比较
灵活,因为它可以直接用 ibaseobase 分别指定进制源和进制转换目标。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章