shell脚本
新建一个.sh文件 文件名可以随便写vi test.sh
echo "hello world"
在该文件夹下执行./test.sh命令 会提示没有权限执行
chmod +x ./test.sh
一定要带上./ 不然系统就会去/目录下找test.sh 文件
shell变量
变量可以由数字 字母 下划线组成 但不能用数字开头
给变量赋值
name="hello tom"
产看name变量的值
echo ${name}
除了可以显示的给变量赋,还可以隐式的给变量赋值
for file in `ls /etc`; do
echo ${file}
done
可以查看etc目录下所有的文件
for val in tom jerry wudy song;do
echo "Hello,${val}"
done
得到结果
Hello,tom
Hello,jerry
Hello,wudy
Hello,song
变量可以被重新定义
username=lisi
username=susan
echo ${username}
显示susan
只读变量
readStr="onlyRead char"
readonly readStr
readStr="writer readStr"
将会报错:This variable is read only.
删除变量
delStr="string"
echo ${delStr}
unset delStr
echo ${delStr}
delStr 不会有任何内容输出
运行shell时,会同时存在三种变量:
局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
shell字符串
单引号里的任何内容都是原样输出的 变量在单引号中是无效的也是原因输出
单引号中不能有单引号 即便对单引号转义也不行
双引号中可以由变量
双引号可以有转义字符
string="hello,\"tom\"!"
输出hello "tom"!
取字符串的长度
string="abcdefg"
echo ${#string}
输出7
截取字符串
string="abcdefgh"
echo ${string:1:5}
从第几个开始:截取几个
输出bcdef
查找子字符串
string="good luck dog"
echo `expr index "$string" dl`
查找d 或 l的位置
输出4
shell数组
支持一维数组 不支持二维数组 没有限制数组的大小 数组的下标从0开始
array1=(val1 val2 val3 val4 val5)
h还可以单独定义
array[0]=val1
array[1]=val2
array[2]=val3
读取数组
${array[0]}
${array[1]}
输出val1 val2
value=${array[2]}
获取所有的数组元素
echo ${array[@]}
获取数组的长度
len=${#array[@]}或者 len=${#array[*]}
获取数组中单个元素的长度
len=${#array[n]}
shell注释
#string="string"
#str="hello"