Shell脚本基础知识

写shell脚本时需要在文件头部 #!/bin/sh 来指定解释器,以下的环境为rhel-7.1

1.变量

1.1 本地变量

   变量名=值  eg:  aa=123

   注意:不会影响子shell,变量名字以数字,字母,下划线组成,不能以数字开头,等号两边不可有空格,当值有空格时用引号引起例如:aa=' sasas'

   read -p "请输入一个值"  aa  用户交互输入将值赋值给aa

Shell脚本基础知识Shell脚本基础知识


 

1.2 环境变量

   export 变量名=值

   和本地变量的区别是可以影响子shell

   env 命令可以查看系统所有的环境变量

Shell脚本基础知识

常见的环境变量

$USER 当前的用户

$UID 当前用户的UID

$HOME 当前用户家目录

$HISTSIZE 历史命令的存储最大值

$HISTFILE 历史命令的存储位置

$PATH 当输入的命令未指定路径时,则在默认路径查找path输出的为默认路径

$PS1 该环境变量决定的是Shell脚本基础知识  的提示信息

$PS2 该环境变量决定的是Shell脚本基础知识Shell脚本基础知识反斜线后的提示符

Shell脚本基础知识

Shell脚本基础知识


 

1.3 位置变量

 $0 表示脚本名称

 $1 表示第一个参数,以此类推,当成为两位数及其以上需要用大括号例如${10}代表第10个参数

 $# 表示参数的个数

 $? 表示所有参数的值

写如下脚本进行测试

#!/bin/sh

# test.sh

echo "one is : $1"

echo "three is : $3"

echo "two is : $2"

echo "ALL is :$# There are: $*"

给文件增加执行权限 chmod +x ./test.sh

./test.sh bob tom jerry

输出

Shell脚本基础知识

 


2.返回值

 $? 表示返回值

 不仅可以表示命令等的正确错误还可以表示逻辑错误

 正确返回0 不正确返回非0

例如 ifconfig 执行完毕则 echo $? 返回 0

   asssasasa 执行完毕 echo $? 返回 123 非0

$? 的值一直不断的在变化

逻辑错误例如: cat /etc/passwd | grep tomxxx 当无结果时 $?的值为非0 当有结果时,结果为0


3.数值运算

echo 1+2    输出 1+2

echo $((1+2)) 输出 3

echo $[1+2]  输出 3

 

let aa=1+2 

echo $aa    输出3

 

aa=1+2 

declare -i aa 

echo $aa     输出3

 

当除法计算小数时候 echo 'scale=4;2/3' | bc 输出 .6666 scale=n代表保留小数后n位


4.对比

 [  比较 ]   [[  比较 ]]  

 第二种 比 第一种支持正则等

数值的比较 -eq 等于 -gt 大于 -ge 大于等于

       -ne 不等于  -lt 小于 -le 小于等于

Shell脚本基础知识Shell脚本基础知识

字符串的比较 == <= >= != > <

Shell脚本基础知识

文件属性 [ -属性 /path/file ]  属性有 r w x f d l b e

Shell脚本基础知识

连接符 && ||


5.判断语句 

5.1 if判断

  if 条件; then

    命令1

    命令2

  elif 条件2; then

    命令1

    命令2

  elif ......

  else 

    命令1

    命令2

  fi

5.2 case判断

  case 变量 in

   值1) 

     命令1

     ;;

   值2)

     命令2

     ;;

   值x)

     命令x

     ;;

   *) 

     命令

     ;;

  esac


 

6.循环

6.1 for循环

 for 变量 in 值1 值2 值3

 do

   循环内容

 done

6.2 while循环

 while 变量

 do

  循环内容

 done 

 while循环可以用来读取文件的内容

 eg:输出/etc/passwd文件的内容

while read aa

    do

     echo $aa

    done < /etc/passwd

 


7.函数

function 函数名(){

 

函数体

 

}

 

调用直接使用 函数名即可

eg: test.sh

#!/bin/sh

function test(){

echo "this is a test"

}

test

输出 this is a test