shell语法基础

Posted lllllLiangjia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell语法基础相关的知识,希望对你有一定的参考价值。

解释器

查看所有的解释器

cat /etc/shells

查看正在使用的解释器类型

grep root /etc/passwd

输出

  • >代表正确输出指定位置
  • 2>代表错误输出指定位置
  • &>表示所有(正确和错误都包括)输出指定位置
  • >>表示追加

定义变量

定义变量的格式:

        变量名 = 变量值

取消变量的格式:

        unset 变量名

注意事项

变量名可以字母/数字/下划线组成,不能以数字开始

变量名的语法格式:

        $变量名

        $变量名

环境变量

  • 存储在/etc/profile或~/.bash.profile
  • 命令env可以列出所有环境变量
  • 常见环境变量:PATH、PWD、USER、UID、HOME、SHELL
echo $PATH

位置变量

  • 存储脚本执行时的参数
  • 使用$n表示,n为数字序列号
  • $1、$2、...、$10、$11、

创建一个脚本user.sh

liangjiabao@liangjiabaodeMacBook-Air mongodb-macos-x86_64-5.0.3 % cat user.sh

useradd "$1"
echo "$2" | passwd --stdin $1

预定义变量

可以直接使用

变量名

含义

$0

当前所在的进程或脚本名

$$

当前运行进程的PID号

$?

上一条命令执行后的返回状态,0表示正常,1或其他值表示异常

$#

已加载的位置变量的个数

$*

所在位置变量的值

变量的作用范围

局部变量:

        新定义的变量默认只在当前shell环境中有效,无法在子shell环境中使用

全局变量:

        全局变量在当前shell及子shell环境中均有效

多引号的区别

  • 双引号 "" :允许扩展,以$引用其他变量
  • 单引号 ' ' :禁止扩展,即便$可视为普通字符
  • 反引号 ` ` :将命令的执行输出作为变量值,$()与反引号等效

read标准值输入取值

格式: read [-p "提示信息" ] 变量名

-p可选,-t可指定超时秒数,-s设置是否在最终端显示输入的内容

read -p "请输入用户名:" name
read -s -p "请输入密码:" pass

useradd $name
echo "$pass" | passwd -- studin $name

运算

整数运算

使用$[] 或 $(( ))表达式

格式:$[整数 运算符 整数] 或 $((整数 运算符 整数))

小数运算

通过软件bc实现小数运算(scale = n可以约束小数位)

安装bc

[root@VM-0-12-centos ~]# yum -y install bc

交互型

[root@VM-0-12-centos ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.5 + 2.3
3.8
// 设置保留三位小数
scale=3
10/3
3.333

非交互式

[root@VM-0-12-centos ~]# echo "1.2 + 3.3" | bc
4.5
// 分隔符作为间隔
[root@VM-0-12-centos ~]# echo "1.2 + 3.3; 10 / 3" | bc
4.5
3
// 保留3位小数
[root@VM-0-12-centos ~]# echo "scale = 3;1.2 + 3.3; 10 / 3" | bc
4.5
3.333

小数的比较

bc支持的比较操作符:> >= < <= == !=

表达式成立返回1,否则返回0

[root@VM-0-12-centos ~]# echo "1 > 2" | bc
0
[root@VM-0-12-centos ~]# echo "10 > 2" | bc
1

范例

read -p "请输入三角形底边长度:" bottom
read -p "请输入三角形的高度:" hight
A=$(echo "scale = 1; 1/2 * $bottom * $hight" | bc)
echo -e "\\033[32m三角形面积是:$A\\033[0m"
[root@VM-0-12-centos ~]# ./test.sh 
请输入三角形底边长度:10
请输入三角形的高度:5
三角形面积是:25.0

以上是关于shell语法基础的主要内容,如果未能解决你的问题,请参考以下文章

Acwing Linux基础课笔记shell语法

Acwing Linux基础课笔记shell语法

bash shell基础语法

shell 基础语法

(转)Shell基础语法

Shell 编程基础 --语法快速入门