SHELL命令
#!:系统脚本运行的解释器或SHELL
echo:向窗口输出文本
运行脚本:
1)将代码保存为test.sh,cd到该目录
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
2)SHELL脚本文件名 作为 解释器参数,直接运行
/bin/sh test.sh
/bin/php test.php
脚本变量:
定义变量\赋值变量:不能有空格
filename=“abc.com”
使用变量:在变量名前加 $, {}可以帮助解释器识别变量边界
echo $filename
echo ${filename}
for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done
只读变量:readonly
#!/bin/bash myUrl="https://www.google.com" readonly myUrl myUrl="https://www.baidu.com"
删除变量:unset, 不能删除只读变量!!!
unset myUrl
SHELL字符串:
单引号:
单引号中任何字符都会原样输出,变量是无效的
需要成对出现,可以进行字符串拼接
双引号:
双引号可以有变量
双引号中可以有转义字符
拼接字符串:
your_name="abc"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接 greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
获取字符串长度:
string=“abc”
echo {#echo}
截取字符串:索引从0开始
echo {string:0:1}
查找子字符串:查找语句用的是反引号 ` `(esc下面的按键), 不是单引号 ' '
查找字符a或b的位置(哪个先出现,先返回哪个)
string="abcde"
echo `expr index "$string" ab` # 输出0
SHELL数组:
不支持多维数组,变量之间用空格分开,索引从0开始
定义数组:
array_name=(value0 value1 valie2)
array_name=(
value0
value1
value2
)
array_name[0]=value0
array_name[2]=value2
读取数组:@ 或 * 表示读取数组所有元素
${数组名[下标]}
a=${array1[0]}
echo ${array1[@]}
获取数组长度:同获取字符串长度
# 获取数组元素个数
length=${#array1[@]}
# 或
length=${#array1[*]}
# 获取单个元素长度
length_ele=${#array1[0]}
SHELL基本运算符 expr
算术运算符:+ - * (需要变成\*使用) / % = == !=
实例:
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
关系运算符: 只支持数字,用来做数字的比较
-eq | 两边相等 |
-ne | 两边不等 |
-gt(greater) | 左边大于右边 |
-lt(lighter) | 左边小于右边 |
-ge | 大于等于 |
-le | 小于等于 |
实例:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi
布尔运算符:
! | 非:表达式为True,返回False |
-o(or) | 或:有一个True,就返回True |
-a(and) | 与:所有为True,返回True |
例子:
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
逻辑运算符: && ||
&& | 逻辑的AND |
|| | 逻辑的OR |
字符串运算符
文件测试运算符
cat: 输出文件内容 “cat text1 text2 >> text3” 将text1,text2内容加上行号(空白行不加)输出到text3中
还可以用来清空文档,制作镜像