记录学习shell中的基础语法
test.sh
#!/bin/bash
echo "start excule sh"
echo "第一个块"
cd /home
sleep 1
:<<EOF
⽂件⽐较符
-e 判断对象是否存在
-d 判断对象是否存在,并且为⽬录
-f 判断对象是否存在,并且为常规⽂件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执⾏
-O 判断对象是否存在,并且属于当前⽤户
-G 判断对象是否存在,并且属于当前⽤户组
-nt 判断file1是否⽐file2新 [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否⽐file2旧 [ "/data/file1" -ot "/data/file2"
EOF
if [ ! -d "/home/test_shell" ]
then
mkdir "test_shell"
else
cd test_shell
for (( i = 0; i < 5; i++ )); do
touch test_$i.txt
done
fi
echo "第二个块"
# 定义变量时,变量名不加美元符号,变量名和等号之间不能有空格
a=1
b=2
c=3
d="12345"
# 删除
unset a
# 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
echo "1删除后b的值是:$a"
echo "2删除后b的值是:${a}"
# 只读变量
readonly b
# 字符串长度
echo "d的长度是:${#d}"
# 字符串切片
echo "切片后的字符是:${d:2:3}"
:<<EOF
qweqwe
qweqwe
qweqwe
qweqwe
EOF
echo "第三个块"
# 数组 #
# 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。
array1=(1 2 3 4)
array2=("a" "b" "c" "d")
array1[4]=5
# 读取数组
echo "读取数组1的数据:${array1[0]}"
#使用 @ 符号可以获取数组中的所有元素
echo "数组2的所有数据是:${array2[@]}"
# 取得数组元素的个数
echo "数组1的长度是:${#array1[@]}"
echo "第四个块"
:<<EOF
字符串测试
参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真
EOF
a=7
if [ a > 5 ]
then
echo "a大于5"
elif [ a < 5 ]
then
echo "a小于5"
else
echo "没有符合条件的"
fi
num1=$[2+2]
num2=$[2*2]
if test $num1 -eq $num2
then
echo "num1==num2"
else
echo "num1!=num2"
fi
for i in array1
do
echo "value is ${i}"
done
case 5 in
1)
echo "进入模式1"
;;
2)
echo "进入模式2"
;;
3)
echo "进入模式3"
;;
4)
echo "进入模式4"
;;
5)
echo "进入模式5"
;;
*)
echo "没有进入模式"
;;
esac
demoFunc(){
echo "this is a function"
}
echo "____开始执行函数______"
demoFunc
demoFunc2(){
# 返回数据
echo "传入参数长度: $#"
echo "输出所有参数:$*"
echo "输出第一个参数: $1"
return $1
}
demoFunc2 1 2 3 4 5 6