shell脚本的【算数运算、分支结构、test表达式】
1.思维导图
2.test表达式
2.1 格式
shell中的单分支
if [ test语句 ];then ----> if test 表达式;then
test语句成立执行的语句块
fi
if [ test语句 ] ----> if test 表达式
then
test语句成立执行的语句块
fi
双分支
if [ test语句 ]
then
test语句成立执行的语句块
else
test语句不成立执行的语句块
fi
多分支
if [ test语句1 ]
then
test语句1成立执行的语句块
elif [ test语句2 ]
then
test语句1不成立,但test语句2成立执行阿语句块
fi
嵌套if
if [ test语句1 ]
then
test语句1成立执行的语句块
if [ test语句2 ]
then
test语句1和test语句2都成立执行的语句块
fi
fi
2.2 test表达式
2.2.1 整数判断
判断平年闰年
#!/bin/bash
read -p "Enter a year: " year
if [ $((year%4)) -eq 0 ] && [ $((year%100)) -ne 0 ] || [ $((year%400)) -eq 0 ];
then
echo "$year 闰年"
else
echo "$year 平年"
fi
2.2.2字符串判断
str1=h
str2=w
if [ $str1 = $str2 ] #判断两个字符串是否相等
then
echo str1==str2
elif [ $str1 != $str2 ] #判断两个字符串是否不相等
then
echo str1!=str2
2.2.3文件判断
输入一个脚本名,判断该脚本是否存在,如果存在判断是否有可执行权限,如果有执行脚本,如果没有添加可执行权限再执行脚本
#!/bin/bash
read -p "enter name of shell" shell
if [ -e "./$shell" ]
then
echo "$shell exist"
if [ -x "./$shell" ]
then
bash $shell
else
echo "$shell not executable"
chmod a+x "./$shell"
bash $shell
fi
fi
3.作业
1..终端输入一个C源文件名(.c结尾)判断文件是否有内容,如果没有内容删除文件,如果有内容
编译并执行改文件
read -p "Enter C file : " cfile
# 检查文件是否存在且是 .c 文件
if [[ -e "$cfile" && "$cfile" == *.c ]]; then
# 检查文件是否有内容
if [ ! -s "$cfile" ]; then
echo "$cfile is empty, deleting the file"
rm "$cfile"
else
echo "$cfile has content, compiling"
# 编译 C 文件,生成默认的 a.out
gcc "$cfile"
# 检查是否生成了目标文件 a.out
if [ -f "a.out" ]; then
echo "Compilation successful. Running the program"
./a.out
else
echo "Compilation failed. No a.out file "
fi
fi
else
echo "The file does not exist or not a .c file."
fi
2.终端输入两个文件名,判断哪个文件的时间戳更新。
# 提示用户输入两个文件名
read -p "enter the first file name: " file1
read -p "enter the second file name: " file2
# 检查文件是否存在
if [[ -e "$file1" && -e "$file2" ]]; then
# 比较文件的时间戳
if [ "$file1" -nt "$file2" ]; then
echo "$file1 is new than $file2."
elif [ "$file1" -ot "$file2" ]; then
echo "$file2 is new than $file1."
else
echo "same time."
fi
else
# 如果有任意一个文件不存在
if [ ! -e "$file1" ]; then
echo " $file1 not exist."
fi
if [ ! -e "$file2" ]; then
echo " $file2 not exist."
fi
fi