Shell脚本速成

shell脚本速成

引入变量

#!/bin/sh
name='变量名'
echo $name

注意:=前后不能有空格,否则就会出现 ./test.sh: 2: name: not found这个错误,也就是说变量定义会失败。

  • 用花括号圈定变量名:
#!/bin/sh
# 这是一个注释
num=2
echo "this is the ${num}nd"

条件

if ....; then
    ....
elif ....; then
    ....
else
    ....
fi

循环

for var in A B C; do 
    echo "var is $var" 
done 

#!/bin/bash
for ((var=0;var<=3;var++)); do 
    echo "var is $var" 
done 

#!/bin/bash
for var in `seq 3`; do 
    echo "var is $var" 
done 

while condition
do
    command
done

测试命令

可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…

通常用[]来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。

  • [ -f “somefile” ]:判断是否是一个文件
  • [ -x “/bin/ls” ]:判断/bin/ls是否存在并有可执行权限
  • [ -n “$var” ]:判断$var变量是否有值
  • [ “$a” = “$b” ]:判断$a和$b是否相等 示例代码:
    #!/bin/bash
    COUNTER=0
    while [ $COUNTER -lt 5 ]
    do
      COUNTER=$((COUNTER + 1))
      echo $COUNTER
    done
    

    [ 后和 ] 前要空格。参考:“[0: command not found” in Bash [duplicate] lt 即为 less than,小于。

函数

函数的主要使用场景是代码复用。函数定义部分应该写在一个 Shell 脚本的开头。

# 定义
functionName() 
{
body
}
# 调用
functionName

无返回值函数:

#!/bin/bash
firstFunction(){
    echo "1 try!"
}
firstFunction

有返回值函数:

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

函数传参

在 Shell 脚本中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数……当 n >=10 时,需要使用 ${n} 来获取参数。