一、Shell脚本使用步骤:
1. 编辑文本文件,如hello.sh
#!/bin/sh
echo "hello world"
2. 添加可执行权限
chmod a+x hello.sh
3. 执行程序
./hello.sh
二、shell脚本文件的编写规范
1、首行声明设置解析器,如:#!/bin/sh
2、注释语法:
单行注释:
# 注释内容
多行注释:
:<<!
注释内容
!
三、脚本文件执行的三种方式
1、sh解释器执行:
sh hello.sh
2、bash解释器执行:
bash hello.sh
3、路径执行方式(先赋权):
./hello.sh
四、多命令处理
在/root/ttest/创建testdir.txt,将“HELLO WORLD”写入testdir.txt文件
#!/bin/bash
touch /root/ttest/testdir.txt
echo "HELLO WORLD" >> /root/ttest/testdir.txt
五、shell变量介绍
查看系统环境变量
通过加载shell配置文件中的变量,共享给shell程序使用
系统级环境变量:shell环境加载全局配置文件中定义的变量
用户级环境变量:shell环境加载用户配置文件中定义的变量env用于查看系统环境变量
set用于查看系统环境变量+自定义变量+函数
常见环境变量
自定义局部变量:
- 可由字母数字下划线组成,不能以数字开头 等号两侧不能有空格。
- 在bash环境中,变量默认类型为字符串类型,无法直接进行数值运算。
- 变量值如果有空格必须以双引号括起来。
- 不能使用关键字作为变量名字。
#变量的定义,var_name=value
age=年龄
#两种方式变量的查看:
$age #直接使用变量名
${age} #使用花括号
#使用花括号可以进行字符串拼接
增:age=年龄
查:echo $age 或者 echo ${age}
改:age=性别
删:unset age
六、常量
变量设置之后不可以修改叫常量
语法:先声明一个变量,再设置为只读,即为常量
val_name=123
readonly val_name
七、自定义全局变量
在当前脚本定义全局变量,这个全局变量可以在当前shell脚本中使用,也可以在子shell环境中使用。
#语法
export val_name1 val_name2
#创建两个sh脚本文件demo1.sh demo2.sh
八、特殊变量
1、$n
$1~$9代表第1个到第9个输入的参数,10个以上用${},即第10个用${10},$0代表获取文件名
语法:
sh 脚本文件 输入参数1 输入参数2 ...
2、$#
获取所有参数的个数
3、$* $#
含义:都是获取所有参数,用于以后输出所有参数
区别:
不加双引号时,$* $#都一样,格式为:$1 $2...$n;
当加双引号时,"$*"获取所有字符串拼接成一个字符串“$1 $2...$n”
当加双引号时,"$#"获取一组参数列表对象"$1" "$2"..."$n"
通过循环可以看出区别,循环语法如下:
for var in 列表变量
do #循环开始
命令 #循环体
done #循环结束
九、常见问题
(1)服务器的编码如果不支持utf-8的话,sh脚本中输出中文就会报错,所以需要在sh脚本文件开头加上:
export LC_ALL=C.UTF-8
export LANG=C.UTF-8