一、系统内置变量
$? 表示上一个命令和脚本的退出状态
$$ 表示当前进程的PID
$! 表示上一个后台命令的PID
$0 表示脚本本身
$1-$9,${10} 表示第几个参数
$# 表示总共有几个参数
shell就是人机交互的一个桥梁,有很多种的shell解释器
二、shell的执行
标准执行方式(需要有可执行权限x):
1.绝对路径:[root@localhost ~]# /root/shell1.sh
2.相对路径:[root@localhost ~]# ./shell1.sh
非标准执行方式(不需要有可执行权限):
1.[root@localhost ~]# sh shell1.sh
2.[root@localhost ~]# bash shell1.sh
3.[root@localhost ~]# . shell1.sh
4.[root@localhost ~]# source shell1.sh
查看执行过程:[root@localhost ~]# bash -x shell1.sh
检查语法是否错误:[root@localhost ~]# bash -n shell1.sh
[root@localhost tmp]# rename file test file[123] #批量修改名字
三、环境变量相关的一些文件
1、$HOME/.bashrc #当前用户的bash信息
2、$HOME/.bash_profile #当前用户的环境变量
3、$HOME/.bash_logout #每个用户退出当前shell时最后读取的文件
4、/etc/bashrc #使用bash shell用户的全局变量
5、/etc/profile #系统和每个用户的环境变量
变量的定义不能以数字开头,不能包含特殊字符
四、数组
1.定义普通数组
[root@localhost ~]# array[0]=var1 #第一种方式
[root@localhost ~]# array1=(name1 name2 name3) #第二种方式
[root@localhost ~]# declare -a #查看所有数组
[root@localhost ~]# echo ${array1[0]} #读取数组里面的下标为0的元素
[root@localhost ~]# echo ${array1[*或者@]} #读取数组里面所有的元素
[root@localhost ~]# echo ${array1[*]:1:2} #从数组下标为1开始读取,一共读取两个元素
[root@localhost ~]# echo ${#array1[*]} #查看数组里总共有多少个元素
[root@localhost ~]# echo ${!array1[*]} #查看数组里面元素的下标
2.定义关联数组
[root@localhost ~]# declare -A books_array #先声明关联数组
[root@localhost ~]# books_array[java]=1 #第一种方式
[root@localhost ~]# books_array[linux]=2
[root@localhost ~]# books_array[php]=3
[root@localhost ~]# echo ${books_array[linux]} #查看单个元素
[root@localhost ~]# echo ${books_array[*]} #查看所有元素
[root@localhost ~]# echo ${#books_array[*]} #查看元素的个数
[root@localhost ~]# echo ${!books_array[*]} #查看元素的下标
[root@localhost ~]# names_array=([name1]=zhangsan [name2]=lisi [name3]=wangwu) #第二种方式
五、read常用法
[root@localhost ~]# read -p "Input your name:" name # -p参数输出提示
[root@localhost ~]# read -s -p "Input your name:" name # -s参数输入时不显示
[root@localhost ~]# read -n 3 -p "Input your name:" name # -n参数限定输入的长度
[root@localhost ~]# read -t 3 -p "Input your name:" name # -t参数限定输入的时间
六、其他变量
[root@localhost ~]# A=/linux/redhat/test.txt
[root@localhost ~]# dirname $A #获取变量A的目录
/linux/redhat
[root@localhost ~]# basename $A #获取变量A的文件名
test.txt
[root@localhost ~]# A=www.baidu.com
[root@localhost ~]# echo $A
www.baidu.com
[root@localhost ~]# echo ${A#*.} #从左往右删除.以前的内容
baidu.com
[root@localhost ~]# echo ${A##*.}
com
[root@localhost ~]# echo ${A%.*} #从右往左删除.以后的内容
www.baidu
[root@localhost ~]# echo ${A%%.*}
www