Shell语法
1 变量
#!/bin/bash
#File by louis
#打印
echo "louis"
#声明变量
A=10
echo $A
#打印当前路径
echo $PWD
echo "#######"
#打印第一个参数
echo "当前程序的名称" $0
echo "第1个参数" $1
echo "第2个参数" $2
#打印输入参数的个数
echo "输入参数的个数" $#
#打印所有的输入参数
echo "所有的输入参数" $*
# 以上代码执行结果
$ ./demo.sh 1 2
louis
10
/home/louis/root/shell
#######
当前程序的名称 ./demo.sh
第1个参数 1
第2个参数 2
输入参数的个数 2
所有的输入参数 1 2
形式 | 说明 |
---|---|
$0 | 当前程序的名称 |
$n | 程序的输入参数 n:第n个参数 |
$* | 所有的输入参数 |
$# | 输入参数的个数 |
$? | 命令执行的状态,一般返回0,代表成功 |
2 循环
2.1 循环中用到的命令
2.1.1 seq:产生数字集合命令
# seq:产生数字集合命令;
$ seq 1 5
1
2
3
4
5
2.1.2 expr两数相加
#expr:两个数相加
# + 号两边要有空格
$ expr 1 + 2
3
2.1.3 tar打包
# 打包当前目录下的文件
$ tar czf all.tgz *
2.1.4 find查找
# 查找当前目录下以.sh结尾的文件
$ find . -name "*.sh"
./demo.sh
./number.sh
2.2 循环练习
2.2.1 for循环
#!/bin/bash
#seq:产生数字集合命令
#``:反引号,取出命令的结果
for i in `seq 1 15`
do
echo "数字 i = $i"
done
#累加
j=0
for((i=0; i<=100; i++))
do
j=`expr $i + $j`
done
echo "累加和为:$j"
#for循环压缩指定文件
for i in `find . -name "*.sh"`
do
tar -czf sh.tgz $i
done
2.2.2 while循环
i=0
while((i<100))
do
echo "数字 $i"
i=`expr $i + 1`
done
#-lt:小于
i=0
while [[ $i -lt 100 ]]
do
echo "数字 $i"
i=`expr $i + 1`
done
#while循环打印文件
while read line
do
echo $line
done</home/louis/root/shell/text.txt
3 if语句
3.1 if语句格式
##################第一种#####################
if(表达式)
fi
##################第二种#####################
if(表达式);then
语句
else
语句
fi
#!/bin/bash
num1=100
num2=200
if(($num1>$num2));then
echo "num1>num2"
else
echo "num1<num2"
fi
3.2 逻辑运算符
符号 | 含义 |
---|---|
-f | 判断文件是否存在 |
-d | 判断目录是否存在 |
-eq | 等于 |
-ne | 不等于 |
-le | 小于 |
-ge | 大于等于 |
-a | 双方都成立 |
-o | 单方成立 |
#!/bin/bash
#判断文件是否存在
#空格不能少
if [ ! -d /home/louis/root/shell/dir ]; then
mkdir -p /home/louis/root/shell/dir
else
echo "/home/louis/root/shell/dir 已存在"
fi
4 算数运算
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
4.1 算数运算符
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 减法 | expr $a - $b |
* | 乘法 | expr $a \* $b |
/ | 除法 | expr $a / $b |
% | 取余 | expr $a % $b |
= | 赋值 | a=$b 把变量b的值赋给a |
== | 相等 | 比较两个数字 |
!= | 不相等 | 比较两个数字 |
注意:条件表达式要放在方括号之间,并且要有空格,例如:[$a==$b]错误,必须写成**[ $a == $b ]**。
4.2 关系运算符
运算符 | 说明 |
---|---|
-eq | 相等返回true |
-ne | 不相等返回true |
-gt | 左边大于右边返回true |
-lt | 左边小于右边返回true |
-ge | 左边大于右边返回true |
-le | 左边小于右边返回true |
4.3 布尔运算符
运算符 | 说明 |
---|---|
! | 非运算 |
-o | 或运算 |
-a | 与运算 |
4.4 逻辑运算符
运算符 | 说明 |
---|---|
&& | 逻辑的AND |
|| | 逻辑的OR |
4.5 字符串运算符
运算符 | 说明 |
---|---|
== | 左右字符串相等返回true |
!= | 左右字符串不相等返回true |
-z | 字符串长度为0返回true |
-n | 字符串长度不为0返回true |
$ | 字符串不为空返回true |
4.6 算数运算方式
使用$(())
$ a=$(( 1 + 2 ))
$ echo $a
3
使用$[]
$ a=$[ 1 + 4 ]
$ echo $a
5
使用let命令
a=10
$ let a=a+1
$ echo $a
11
使用expr外部程式
$ a=`expr 1 + 5`
$ echo $a
6
5 重定向
输入重定向:<
输出重定向:>
$ echo hello > file.txt
$ cat file.txt
hello
6 函数
第一种方式:
name()
{
command;
command2;
}
#!/bin/bash
test(){
echo "test函数"
}
test
testArgs(){
echo "$1 $2"
}
testArgs "a" "b"
第二种方式:
[ function ] funname [()]
{
action;
[return int;]
}