Bash学习笔记:基础

The Bash shell is commonly used interactively: It lets you enter and edit commands, then executes them when you press the Return key.The Bash shell can also be run non-interactively from a script, making the shell require no human interaction.

变量

变量的初始化,Bash shell 在默认情况下不会区分变量类型,即使将整数和小数赋值给变量,它们也会视为字符串。

变量的使用是通过美元符号$来引用的。例如

#!/usr/bin/env bash

author="tom"
echo $author
echo ${author}

# 将命令的结果赋值给变量
variable=$(command)

echo ${variable}

变量名外面的花括号是可选的,可加可不加,加上可以帮助解释器识别变量的边界。建议给所有变量加上花括号。

在 shell 中定义的变量,默认就是全局变量。全局变量的作用范围是当前的 shell 进程,而不是当前 shell 脚本文件。

在 shell 函数中定义的变量默认也是全局变量,如果想要将变量作用域仅限于函数内部,可在定义时加上 local 命令。

全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用 export 命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为 环境变量。

通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的。

命令替换

shell 命令替换是指将命令的输出结果赋值给某个变量。有两种方式完成命令替换,一是反引号 ` `,二是美元符号加括号 $()。

variable=`commands`
variable=$(commands)

commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号 ; 分隔。

$() 仅在 Bash shell 中有效,但支持嵌套。反引号` `可在多种shell中使用,但是不支持嵌套。

参数

通过 $n 的形式来接收参数,称为位置参数。

给脚本文件传递位置参数

echo "Language: $1"
echo "URL: $2"

 给函数传递位置参数

#定义函数
function func(){
    echo "Language: $1"
    echo "URL: $2"
}
#调用函数
func Java https://www.company.com

shell 中有一些特殊变量:

  • $0 当前脚本的文件名
  • $# 传递给脚本或函数的参数个数
  • $* 传递给脚本或函数的所有参数
  • $@ 传递给脚本或函数的所有参数
  • $? 上个命令的退出状态,或者函数的返回值
  • $$ 当前 shell 进程 ID。对于 shell 脚本,就是这些脚本所在的进程 ID

shell 中变量分为位置变量和特殊变量。

数据类型

shell 中基本数据类型有字符串、数组。

数学计算

shell 和其他编程语言不同,shell 不能直接进行算数运算,必须使用数学计算命令。shell 中常用的数学计算命令如下:

  • (( )) 用于整数运算,效率很高,推荐使用
  • let 用于整数运算
  • $[ ] 用于整数运算
  • expr 用于整数运算,也可以处理字符串
  • bc 可以处理整数和小数,Linux下的一个计算器程序
  • declare -i 将变量定义为整数,仅支持最基本的数学运算(加减乘除和取余)

 双小括号 (( )) 的语法格式为:((表达式)) 表达式可以只有一个,也可以多个,多个表达式之间以逗号分隔。对于多个表达式,以最后一个表达式的值作为整个 (( )) 命令的执行结果。

可以使用 $ 获取 (( )) 命令的结果,这和使用 $ 获得变量值是类似的。在 (( )) 中使用变量不需要加 $ 前缀,(( )) 会自动解析变量名。

b=10
((a=b+5))
echo ${a}

d=$((b+6))
echo ${d}

let 命令语法格式为:let 表达式 或者 let "表达式" 或者 let '表达式' 它们都等价于 ((表达式)) 。

选择结构

最常用的 if 语句,语法格式为:

if  condition
then
    statement(s)
fi

也可以将 if 和 then 写在一行:

if  condition;  then
    statement(s)
fi

多条件语句:

if  condition1
then
   statement1
elif condition2
then
    statement2
elif condition3
then
    statement3
...
else
   statementn
fi

退出状态 exit statu 每一条 shell 命令,包括 Bash 内置命令、Linux 命令、自定义 shell 函数,当它退出(运行结束)时,都会返回一个比较小的整数值给调用(使用)它的程序,这个就是命令的退出状态。

很多 Linux 命令其实就是一个 C 语言程序,main() 函数的最后都有一个 return 0,如果程序想在中间退出,还可以使用 exit 0,这其实就是 C 语言的退出状态。当有其他程序调用这个程序时,就可以捕获这个退出状态。

if 语句的判断条件,从本质上讲,判断的就是命令的退出状态。

按照惯例来说,推出状态0 表示成功,其它任何退出状态为失败。但是也有例外,例如 diff 命令。

INSERT

参考:

http://c.biancheng.net/shell/ 

猜你喜欢

转载自www.cnblogs.com/colin220/p/10967316.html