Shell 脚本攻略-小试牛刀

在终端中打印

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 = valuevar=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

你可能感兴趣的:(Shell 脚本攻略-小试牛刀)