什么是shell脚本?
通俗来讲,就是当要重复性操作一些命令,批量处理事务,自动化运维,定时任务执行时;如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本。它是一个读取文件并执行命令的文件文件。 既然这么方便,那要如何使用呢?
首先创建一个文本文件什么格式都行,开头定义约定的标记
#!/bin/bash
注意:
在Shell中如果一行的第一个字母是#,则是注释,但是上面这个约定写在第一行,所以不是脚本注释行,如果写在某个命令之后, 则变成注释行。
保存的时候改成 .sh的格式
然后更改文件编码格式:
用notepad++打开文件,找到编码,选择UTF-8,找到编辑选择,选择文档格式转换 ,选择Unix因为新建的文件没有什么权限 ,所以文件需要有读、写、执行的权限
chmod 777 xxx.sh
在shell脚本中定义一个变量
name=zp
要想在xshell打印name的值有几种方法:
shell脚本中使用$获取值,但有时要注意转义的存在
echo name或者echo\”name 或者 echo \”name或者echo\”name\”都行
但如果是单引号的话echo ‘$name’,就不会显示值,而是显示 name![](https://img−blog.csdnimg.cn/20200601193833380.png)是因为单引号在shell脚本里面值会当成字符串输出,所以要注意‘ls‘这个符号在Esc键下边,代表的是一个执行命令,要执行里面语句,结果可以放到变量里单独输出字符name![](https://img-blog.csdnimg.cn/20200601193833380.png)是因为单引号在shell脚本里面值会当成字符串输出 ,所以要注意`ls`这个符号在 Esc 键下边,代表的是一个执行命令,要执行里面语句,结果可以放到变量里单独输出字符name![](https://img−blog.csdnimg.cn/20200601193833380.png)是因为单引号在shell脚本里面值会当成字符串输出,所以要注意‘ls‘这个符号在Esc键下边,代表的是一个执行命令,要执行里面语句,结果可以放到变量里单独输出字符的话用\\转义 $
计算2个变量的值
num1=4 num2=8
var=num1+num1+num1+num2
echo $var
注意
变量名和等号之间不能加空格
这里和java不一样,它的结果是把2个值拼接一起显示,而不会得到相加的值
要想得到相加的值要用
反引号
var=
expr $num1 + $num2
注意 表达式和运算符之间要有空格
shell中传递参数
$0 代表第一个变量 在xshell里输入的第一个字符串 来当作第一个变量
if判断 语法: if [ ] then fi
if [ $1 == $2 ]
then echo “hello”
fi
$1和$2表示在xshell中输入的第二个和第三个值作为$1和$2的值
注意
条件表达式要放在方括号之间,并且也要有空格
-eq 等于
-ne 不等于
-gt 大于
-It 小于
-le 小于或等于
-ge 大于或等于
! 非
-o || 或 || && 必须多一层[ ]
-a && 与 表示都满足才行
字符串比较
= 字符串是否相等 如 [ $a = $b ] 返回 false
!= 字符串不相等 如 [ $a != $b ] 返回 true
-z 长度是否为0 ,为0返回true 如 [ -z a]返回false−n长度是否不为0,不为0返回true如[−n\”a ] 返回 false-n 长度是否不为0 ,不为0返回true 如 [ -n \”a]返回false−n长度是否不为0,不为0返回true如[−n\”a\” ] 返回 true
$ 长度是否为空 ,不为空返回true 如 [ $a ] 返回 true
文件运算符
file =“xx.txt”
if [ -e $file ]
then echo “hello”
else “null”
fi
-d 判断是否为目录
-e 判断目录或文件是否存在
-f 判断是否为文件
-r 判断文件或目录针对当前用户是否可读
-W 判断文件或目录针对当前用户是否可写
-X 判断文件或目录针对当前用户是否可执行
-s 文件不为空
多重 if判断
if elif else 语法: java中的if else if 在这里用if[] elif else fi
if condition1 条件1
then
command1 输出结果1
elif condition2 条件2
then
command2 输出结果2
else
commandN 输出结果N
fi
case java 中的switch
case $1 in ;;相当于break 不能丢
模式1)
echo “one”
;;
模式2)
echo “two”
;;
*)echo “other”
;;
esac
for 循环 语法: for 变量名 in 给的值 或者 变量名do输出值doneforxxxin12345doecho\”变量名 do 输出值 donefor xxx in 1 2 3 4 5doecho \”变量名do输出值doneforxxxin12345doecho\”xxx\”
done
后续会写一些简单的配置文件脚本!