shell语法常见总结

在服务器端运行,离不开shell的使用。今天主要总结一下shell的用法:

Shell 是什么? Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

image-20200602232857092

写一个shell文件,第一行表示用bash执行,第二行打印出“hello world”

#!/bin/bash 
echo 'hello world!'

执行的方法有两种,一种是 sh hello.sh 另外一种方法是 chmod +x hello.sh 之后,这样./hello.sh 就变成了可执行文件,可以直接运行。

说明:

  • #! 告诉系统这个脚本需要什么解释器来执行。
  • 文件扩展名 .sh 不是强制要求的。
  • 方法1 直接运行解释器,hello.sh 作为 Shell 解释器的参数。此时 Shell 脚本就不需要指定解释器信息,第一行可以去掉。
  • 方法2 hello.sh 作为可执行程序运行,Shell 脚本第一行一定要指定解释器。

Shell 变量 定义 Shell 变量分为系统变量自定义变量。系统变量有\(HOME、\)PWD、$USER等,显示当前 Shell 中所有变量:set 。 变量名可以由字母、数字、下划线组成,不能以数字开头。 基本语法

  • 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
  • 删除变量:unset 变量名 。
  • 声明静态变量:readonly 变量名,静态变量不能unset。
  • 使用变量:$变量名

将命令返回值赋给变量(重点)

  • A= `ls` 反引号,执行里面的命令
  • A=$(ls) 等价于反引号

Shell 环境变量 (常用) 定义

image-20200602233553542

基本语法

  1. export 变量名=变量值,将 Shell 变量输出为环境变量。
  2. source 配置文件路径,让修改后的配置信息立即生效。
  3. echo $变量名,检查环境变量是否生效

位置参数变量(常用) 基本语法

  • $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
  • $* :命令行中所有参数,且把所有参数看成一个整体。
  • $@ :命令行中所有参数,且把每个参数区分对待。
  • $# :所有参数个数。

预定义变量 定义 在赋值定义之前,事先在 Shell 脚本中直接引用的变量。 基本语法

  • $$ :当前进程的 PID 进程号。
  • $! :后台运行的最后一个进程的 PID 进程号。
  • $? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。

运算符 基本语法

  • $((运算式)) 或 $[运算式]
  • expr m + n 注意 expr 运算符间要有空格
  • expr m - n
  • expr \*,/,% 分别代表乘,除,取余

流程控制

if 判断

基本语法

if [ 条件判断式 ];then   
程序
fi
# 或者(推荐)
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi

for 循环

基本语法

# 语法1
for 变量名 in 值1 值2 值3...
do
程序
done

# 语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done

while 循环

基本语法

while [ 条件判断式 ]
do
程序
done

读取控制台输入

基本语法

read (选项) (参数) 选项

  • -p:指定读取值时的提示符
  • -t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。

参数

  • 变量名:读取值的变量名

函数

和其它编程语言一样,Shell 编程有系统函数和自定义函数,本文只举两个常用系统函数。

系统函数

  • basename,删掉路径最后一个 / 前的所有部分(包括/),常用于获取文件名。

    基本语法

    • basename [pathname] [suffx]

    • basename [string] [suffx]

    • 如果指定 suffx,也会删掉pathname或string的后缀部分。

  • dirname,删掉路径最后一个 / 后的所有部分(包括/),常用于获取文件路径。 基本语法

  • dirname pathname

  • 如果路径中不含 / ,则返回 '.' (当前路径)。

自定义函数

基本语法

[ function ] funname[()]
{
Action;
[return int;]
}

# 调用
funname 参数1 参数2...

   转载规则


《shell语法常见总结》 胡哲 采用 知识共享署名 4.0 国际许可协议 进行许可。