在终端中打印
Script
#!/bin/bash
echo hello world
echo 'hello world'
echo "hello world"
echo -e "1\t2\t3"
echo "1\t2\t3"
Note
- 字符串可以以三种形式输出,但是单引号的字符串中不能对变量求值,例如
var=1; echo 'hello $var'
会输出 hello $var
- echo 的输出会默认会增加换行
- -e 表示字符串中有转义字符
变量和环境变量
Script
#!/bin/bash
var=123456
echo $var
echo ${var}
echo "var length is: ${#var}"
var_quote="123456"
[ $var -eq $var_quote ] && echo 'var equals to var_quote'
[ $var == $var_quote ] && echo 'var equals to var_quote'
[ $var = $var_quote ] && echo 'var equals to var_quote'
Output
123456
123456
var length is: 6
var equals to var_quote
var equals to var_quote
var equals to var_quote
Note
- 不论是否有引号,变量值的类型都是 String
-
var = value
和 var=value
两者含义不同,前者表示等于条件判断,后者表示赋值。
数学运算
Script
#!/bin/bash
i=1
j=2
let k=i+j
echo k=i+j is: $k
let k++
echo k++ is: $k
let k--
echo k-- is: $k
k=$((i + j))
echo "(()) operator: $k"
k=$[i + j]
echo [] operator: $k
Note
- 可以通过 let, $(()), $[] 对变量进行整形计算
-
bc
可以进行浮点数计算
重定向文件描述符
Script
#!/bin/bash
file_name=/tmp/temp.txt
touch $file_name
echo "hello" > $file_name
ls + &> $file_name
echo "append" >> $file_name
ls + 2>> $file_name
ls . 1>> $file_name
Note
-
>
表示截断,>>
表示在文件末尾追加
-
cmd < file
表示将 file 的内容重定向为 stdin
- 文件描述符 0,1,2 分别表示标准输入、标准输出、标准错误
数组和关联数组
Script
#!/bin/bash
array1=(1 2 3)
echo array1 is: ${array1[*]}
array2[0]=1
array2[1]=2
array2[2]=3
echo array2 is: ${array2[*]}
echo array2 length is: ${#array2[*]}
Note
- 关联数组通过
declare -A map
声明,在低版本的 bash 中不支持。
函数和参数
Script
#!/bin/bash
fn()
{
echo '$0 is: '$0
echo '$1 is: '$1
echo '$2 is: '$2
echo '$@ is: '$@
echo '$* is: '$*
return 10
}
fn 1 2
echo return value is: $?
Note
将命令的输出存到变量中
Script
#!/bin/bash
file_name=/tmp/tmp.txt
echo -e "1\n2\n3" > $file_name
cmd_output=$(cat $file_name)
echo $cmd_output
cmd_output=`cat $file_name`
echo $cmd_output