shell编程

shell特殊变量

$0 当前脚本的文件名

$n 传递给脚本或函数的参数; n 是一个数字,表示第几个参数;也可以用于函数的参数

$# 传递给脚本或函数的参数个数

$* 传递给脚本或函数的所有参数

$@ 传递给脚本或函数的所有参数

$? 上个命令的退出状态,或函数的返回值

$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

 

$* 和 $@ 的区别:

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以"$1" "$2" … "$n" 的形式输出所有参数

当它们被双引号""包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数

 运算符

算术运算符:+   -   *   /   %   =   ==   !=

关系运算符:-ne -eq -gt -lt -ge -le

布尔运算符:!(非) -o(或) -a(与)

字符串运算符:== != -z(空) -n(非空)

文件测试操作:

-e 文件是否存在

-f 是否为普通文件

-d 是否为目录

-w 是否具有写权限

-x 是否具有执行权限

条件语句

if <condition>; then

  <statement>

fi

 

if <condition>; then

  <statement>

elif <condition>; then

  <statement>

else

  <statement>

fi

 

case <variable> in <range>

  <value>)

    <statement>

  ;;

esac

 循环语句

while <condition>; do

  <statement>

done

 

for <variable> in <range>; do

  <statement>

done

 shell函数

function <function_name>() {

  <statement>

}

  函数调用以及传参: <function_name> <para1> <para2>...<paran>

 shell替换

`` <=> $() 命令替换

$ 、${} 变量替换,一般情况下没有区别

$(()) 其中的变量名称,可于其前面加 $ 符号来替换,也可以不用

[[是 bash 程序语言的关键字,支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式;

字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,而[]内不能使用正则

set -e 用法

当命令以非零状态退出时,则退出shell

主要作用是当脚本执行出现意料之外的情况时立即退出,避免错误被忽略,导致最终结果不正确

一般放在shell脚本开始位置(位于 #!/bin/bash 之后)

<<< 

<<< 被称为here-string,用于给程序预先设置一个文本字符串,从而避免在程序运行过程中手动键入文本。

cat <<< “TEST”# 打印文本 TEST

xargs rm –rf <<< “a.h b.h c.h”# 删除文件 a.h b.h c.h

=~

=~ 为正则匹配,用来判断右边的参数是否符合左边的要求。 

[[ "tongyishu" =~ [0-9] ]]  # 不匹配,未包含数字

echo $?                   # output 1

[[ "tong123yishu" =~ [0-9] ]] # 匹配,包含数字

echo $?                   # output 0

 sh -c

  sh -c 可以让 bash 将一个字符串作为一个完整的命令来执行

  sh -c "echo tongyishu" # 输出 tongyishu

原文地址:https://www.cnblogs.com/tongyishu/p/11696160.html