shell使用脚本
创建**.sh 文件,**.sh文件就是脚本文件
#!/bin/bash
#(#!) 选择使用的解释器 /bin/bash是常用的解释器
#下面可以写shell命令 ,运行脚本会依次执行命令
执行脚本
以test.sh为例
chmod +x test.sh #给脚本文件添加执行权限,如果有执行权限 不用添加
./test.sh #执行脚本
/bin/bash test.sh #执行脚本
- 不能用 test.sh,需要用./test.sh执行脚本使用 test.sh 系统会在PATH里寻找 test.sh,当前目录如果不在系统PATH目录中时,系统不能找到这个文件
- /bin/bash test.sh
使用这个解释器 执行这个文件,这样执行的时候 不需要在文件首行定义解释器,定义了也会使用命令中的解释器执行,
会寻找当前目录下的文件,可以不使用 ./test.sh寻找文件
Shell变量
显示赋值
url="www.shell.com"
定义变量规则
- 命名只能使用英文字母,数字和下划线,首个字符不能使用数字
- 变量中间不能出现空格,可以使用下划线
- 等号(=)两边不能出现空格
- 不能使用除下划线以外的其他符号
- 不能使用关键字
- 大小写区分,大小写不同时为不同的变量
语句赋值
for file in `ls /usr`;do echo $file;done
for file in $(ls /usr) ;do echo $file;done
循环遍历赋值
do 为每次循环的时候执行的命令
done结束语句
$file 只能保存最后一个循环出来的结果
使用变量
test="shell"
echo $test
echo ${test}
readonly test
readonly aaaa="readonly"
变量使用有两种方法 在跟字符串一起使用时 中间没有空格的时候可以使用第二种方法来识别变量的边界
readonly设置只读变量,设置以后无法更改,重新赋值会报错,只有注销当前shell才能解除只读变量的设定
readonly
-f
:定义只读函数;-a
:定义只读数组变量;-p
:显示系统中全部只读变量列表
字符串中使用变量
skill="java"
echo "I am good at ${skill}Script"
# I am good at javaScript
echo 'I am good at ${skill}Script'
# I am good at ${skill}Script
- 双引号可以识别变量,双引号里可以出现转义字符
- 单引号不能识别变量,单引号里的任何字符都会原样输出
- 双引号中间可以使用转义后的双引号
- 单引号中间不能出现单引号(转义后也不行)
删除变量
unset test
删除后的变量不能使用,只读变量不能被删除
变量类型
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
处理字符串的方法
test="asdfg"
echo ${#test}
#5
echo ${test:1:2}
#sd
echo ` expr index "$test" d`
#3
${#***}
可以计算变量字符串的长度${***:a:b} a,b
为数字,从a开始截取b个字符,字符第一位是0expr index "变量" d
在变量中查询d出现的位置,需要使用反引号