首行:#!/bin/bash
#!符号能够被内核识别成为一个脚本的开始,这一行必须位于脚本的首行
注释:#
除去第一行的#
内容:可执行结构和内容
创建文件的方式:
touch
echo “” > first.sh 注:向文件输入””中的内容 > 是覆盖 >> 是追加
vim
chmod +x first.sh 给文件赋予权限
执行脚本:
绝对路劲、相对路径 会新开一个bash,不同的bash中的变量无法共享
bash first.sh 会新开一个bash,不同的bash中的变量无法共享
source first.sh source只在同一个bash执行,共享变量
变量设置规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名,建议大写便于区分
在bash中,变量的默认类型是字符串类型,乳沟要进行数值运算,则必须指定变量类型为数值类型
变量等号连接,等号两边不能有空格(单双引号中可以使用空格)
变量分类
用户自定义变量、环境变量、位置参数变量、预定义变量
可以通过set查看系统中的所有变量
位置参数变量:主要是用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定
预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量的作用是固定的
用户自定义变量
将一个命令赋值于一个变量
a=`ls` #1前面的那个符号
a=$(ls)
将一个变量赋值于另一个变量
a=$b
a=$(b)
a=”$b” #单引号不是赋值,双引号才是赋值
删除变量
uset
注:用户自定义变量,作用域为当前的shell环境,如果通过bash进入子shell环境,就取不到值了
环境变量
用户自定义变量只在当前shell中生效,而环境变量会在当书签shell和子shell中生效,如果把环境变量写入相应的配置文件,那么环境变量会在所有的shell中生效
export 变量名=变量值 #声明变量
位置参数变量
$n $0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
$* 把所有参数当作整体
$@ 把每个参数分开对待
$# 所有参数的个数
eg:./**.sh 11 22 33 44
echo "所有参数个数:$#" 4
echo "所有参数:$*" 11 22 33 44
echo "所有参数:$@" 11 22 33 44(这个是一个一个输出的)
位置变量和预定义变量一个脚本
#!/bin/bash
echo '$0 获取当前执行的Shell脚本文件名: ' "$0"
echo '$n 获取当前执行的Shell脚本的第n个参数值,n=1..9 ' '$1'=$1,'$2'=$2,'$3'=$3
echo '$ 获取当前Shell的所有参数 $1 $2 $3 ...注意与$@的区别:' $
echo '$# 获取当前Shell命令行中的参数总个数:' $#
echo '$$ 获取当前Shell的进程号(PID): '$$
sleep 3 &
echo '$! 执行上一个指令的PID: ' $!
echo '$? 获取执行的上一个指令的返回值: ' $?
echo '$@ 获取当前Shell的所有参数 "$1" "$2" "$3" "...":' $@
echo '$ 在此之前的命令或脚本的最后一个参数: '$
EOF
sh positional.sh a b c d e
$0 获取当前执行的Shell脚本文件名: positional.sh
$n 获取当前执行的Shell脚本的第n个参数值,n=1..9 $1=a,$2=b,$3=c
$* 获取当前Shell的所有参数 $1 $2 $3 ...注意与$@的区别: a b c d e
$# 获取当前Shell命令行中的参数总个数: 5
$$ 获取当前Shell的进程号(PID): 1979
$! 执行上一个指令的PID: 1980
$? 获取执行的上一个指令的返回值: 0
$@ 获取当前Shell的所有参数 "$1" "$2" "$3" "...": a b c d e
$_ 在此之前的命令或脚本的最后一个参数: e