应用程序优先将指令发给shell,由shell解释器来翻译并执行。
如果脚本第一行未使用#!指定shell,则系统使用当前环境shell运行脚本。
shell是弱类型的脚本语言。shell定义的变量,数据类型默认都是字符串类型,不用主动声明。
强类型的脚本语音,在定义变量时必须指定数据类型。
/etc/shells文件中记录了当前系统支持的shell类型。
history -c 清除历史记录
history -r 恢复历史记录
删除~/.bash_history文件可以清除所有历史记录freebsd的csh历史记录文件是~/.history
!加history序号可重复序号对应的命令。!!执行上一个命令。
变量赋值时,变量和值与等号之间不得有空格,name="ABC"是对的,name = "ABC"是错的。
变量名只能包含数字、字母、下划线,不能以数字开头,不能用标点符号,严格区分大小写。
对变量的调用标准方法是用花括号将变量括起来,比如echo ${name},而echo $name是简写。
本地变量的作用域仅针对当前shell。
环境变量的作用域为全局。
单引号不识别特殊语法
双引号能识别特殊语法
echo $?,返回0表示上一个命令正确执行,若执行不正确,则返回其他数值(1-255)。
使用bash执行一个sh脚本,脚本中的变量仅影响子shell中的值,使用source执行一个脚本,则脚本中的命令被视为是在父shell中执行。
例如:
当前shell中:name=abc。
脚本test.sh中内容为:
name=ABC
运行bash test.sh,然后echo $name,返回abc;运行source test.sh,然后echo $name,返回ABC。
反引号括起来的命令,执行后返回改命令的执行结果。
环境变量文件加载顺序:
  1. ssh登录linux后,系统启动一个bash shell,bash会读取若干个系统环境文件,检查环境变量设置
  2. /etc/profile:全局环境变量文件,为系统的每个用户设置环境变量,当用户第一次登录时执行该文件,并从/etc/profile.d目录的配置文件中搜集shell的设置
  3. 然后读取/etc/profile.d目录下的脚本,有系统诸多脚本,也放入自定义需要登录加载的脚本,便于用于登录后立即运行的脚本
  4. 运行$HOME/.bash_profiel(用户环境变量文件)
  5. 运行$HOME/.bashrc
  6. ......
  7. 运行/etc/bashrc
一行执行多个命令(符号两边是否有空格不影响结果): 特殊参数变量: 实列:
[lidapeng@X61s ~]$ cat 1.sh
echo $#
echo "$*"
echo "$@"

echo "print each param from \"\$*\""
for var in "$*"
do
 echo "$var"
done

echo "print each param from \"\$@\""
for var in "$@"
do
 echo "$var"
done

[lidapeng@X61s ~]$bash 1.sh a  b c
3
a b c
a b c
print each param from "$*"
a b c
print each param from "$@"
a
b
c
特殊状态变量: 实例:
[lidapeng@X61s ~]$ cat 2.sh
[ $# -ne 2 ] && {               -ne 表示不等于
  echo "must be two args"
  exit 119                      终止程序,并返回状态码119,用于echo $?返回值
}
echo ok
echo "当前脚本的id是: $$"
[lidapeng@X61s ~]$ bash 2.sh  1 2 3
must be two args
[lidapeng@X61s ~]$ bash 2.sh  1 2
ok
当前脚本的id是:46854
[lidapeng@X61s ~]$ echo $_
2
[lidapeng@X61s ~]$ bash 2.sh  1
must be two args
[lidapeng@X61s ~]$ echo $?
119
[lidapeng@X61s ~]$ echo $_
119
用$!获取上一次后台执行的程序的PID,实例:
[lidapeng@X61s ~]$ nohup ping baidu.com & 1> /dev/null   在后台ping baidu.com
[1] 41609
[lidapeng@X61s ~]$ appending output to nohup.out

[lidapeng@X61s ~]$ ps -ef |grep baidu.com                查看ping的PID
41609  0  SC   0:00.01  ping baidu.com
42588  0  S+   0:00.00  grep baidu.com
[lidapeng@X61s ~]$ echo $!                               查看上一次在后台执行的命令的PID,与ps命令结果一致
41609
[lidapeng@X61s ~]$ kill 41609                            杀掉该进程
[lidapeng@X61s ~]$ ps -ef |grep baidu.com
43435  0  S+   0:00.00  grep baidu.com
[1]+  终止                  nohup ping baidu.com
[lidapeng@X61s ~]$ ps -ef |grep baidu.com
43679  0  S+   0:00.00  grep baidu.com