1.Shell概述

Shell是一个命令行解释器,接收应用程序/用户命令,然后调用操作系统内核。
Shell易编写,易调试灵活性强。

2.Shell基础

格式:以#!/bin/bash开头

  1. #!/bin/bash
  2. echo "hello world";
  1. 1.sh/bash xxx.sh
  2. 2.输入脚本的绝对路径或相对路径执行脚本
  3. chmod +x xxx.sh 赋予权限
  4. 3.source xxx.sh
  5. . xxx.sh

3.Shell变量

1.系统变量 查看系统变量:env printenv 常用系统变量:$HOME $PWD $SHELL $USER 查看变量:set

  1. echo $HOME
  2. echo $PWD
  3. echo $SHELL
  4. echo $USER

2.自定义变量 格式:变量名=变量值 等号前后不能有空格 撤销变量:unset 变量名 声明只读变量:readlonly 变量名 提升为全局变量:export 变量名

  1. #!/bin/bash
  2. echo "hello world";
  3. a=Linux;
  4. echo $a;
  1. hello world
  2. Linux
  1. [root@test scripts]# a=$((1+5))
  2. [root@test scripts]# echo $a;
  3. 6
  4. [root@test scripts]# a=$[5+5]
  5. [root@test scripts]# echo $a;
  6. 10

4.Shell的特殊变量

$n:n为数字,$0代表该脚本的名称,$1-$9代表第1~第9个参数,10以上的参数,需要用大括号包含,例如${20}

  1. #!/bin/bash
  2. echo '=====$n====='
  3. echo script name:$0
  4. echo 1st paramater: $1
  5. echo 2nd paramater: $2
  1. [root@test scripts]# source test.sh aaa bbb
  2. =====$n=====
  3. script name:-bash
  4. 1st paramater: aaa
  5. 2nd paramater: bbb

$#:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性

  1. #!/bin/bash
  2. echo '=====$n====='
  3. echo script name:$0
  4. echo 1st paramater: $1
  5. echo 2nd paramater: $2
  6. echo '=====$#====='
  7. echo paramater numbers: $2
  1. [root@test scripts]# source test.sh aaa bbb
  2. =====$n=====
  3. script name:-bash
  4. 1st paramater: aaa
  5. 2nd paramater: bbb
  6. =====$#=====
  7. parameter numbers: 2

$/$@ 获取命令行的所有参数,$是把所有参数看做一个整体,$@把每个参数区分对待

  1. #!/bin/bash
  2. echo '=====$n====='
  3. echo script name:$0
  4. echo 1st paramater: $1
  5. echo 2nd paramater: $2
  6. echo '=====$#====='
  7. echo parameter numbers: $#
  8. echo '=====$*====='
  9. echo $*
  10. echo '=====$@====='
  11. echo $@
  1. [root@test scripts]# source test.sh aaa bbb
  2. =====$n=====
  3. script name:-bash
  4. 1st paramater: aaa
  5. 2nd paramater: bbb
  6. =====$#=====
  7. parameter numbers: 2
  8. =====$*=====
  9. aaa bbb
  10. =====$@=====
  11. aaa bbb

$?:最后一次执行时命令的返回状态,若值为0,代表上一个命令正常执行,若值不为0,则证明上一个命令没有正常执行

  1. [root@test scripts]# parameter.sh
  2. -bash: parameter.sh: 未找到命令
  3. [root@test scripts]# echo $?
  4. 127
  5. [root@test scripts]#