1、简单的命令
1) 判断变量名是否等于某值
有一个name变量,判断name是否等于hua:
name=xx
if [ n$name == "nhua" ]; then
echo "yes"
else
echo "no"
fi
为啥不用 if [ $name == "hua" ]; ? 而是两边都加上了n
因为 name变量有可能为空,会出现错误 [: ==: unary operator expected
2) 将最新的文件名赋给变量
求home目录下以Time-开头的最新的一个文件
file=`ls /home/Time-* -t | head -1`
echo file=$file
file=/home/Time-20230223.txt
3) 截取完整路径下文件的文件名
file=/home/Time-20230223.txt
file_name=${file##*/}
echo file_name=$file_name
file_name=Time-20230223.txt
5) 获取当前时间戳
current_time=$(date +%Y%m%d%H%M)
echo $current_time
202303280151
6) shell获取上一条命令的结果
两种方法
result_top=`echo ${PIPESTATUS[0]}`
`echo $?`
7) chown
将 文件名1 的 拥有者 改为 tester
sudo chown teter:tester 文件名1
2、查找文件
1) 查找当前目录以及子目录下的文件名后缀为txt的文
find . -name "*.txt"
2) 查找当前目录以及子目录下的文件名后缀为bin的文件
find . -name "*.bin"
3) 查找当前目录以及子目录文件中含有XXX 且以 h结尾的文件
查找当前目录以及子目录文件中含有XXX 且以 h结尾的文件
grep xxx --include=*.h -r
3、case语句
1) 一个简单的case语句
1、case语句结构
case 变量值 in
模式 1)
命令 1
;;
模式 2)
命令 2
;;
*)
默认命令
esac
2、case语句实例
通过等级来判断分数,A等级大于等于85分,B等于大于等于60分,其他等级小于60分。
Grade为C,判断分数:
Grade=C
case $Grade in
A|a )
echo "A等级,成绩大于等于85分"
;;
B|b)
echo "B等级,成绩大于等于60分"
;;
*)
echo "C等级,成绩小于60分"
esac
输出
./Test_case.sh
C等级,成绩小于60分
2) 一个较复杂的case语句
包含不确定数量的参数以及shift
https://editor.csdn.net/md/?articleId=130326169
4、文件描述符
1) 在Linux系统中0 1 2 是文件描述符
0 -> 标准输入(stdin)
1 -> 标准输出(stdout)
2 -> 标准错误输出(stderr)
2) 2>&1
将标准错误输出中定向到标准输出
3) 重定向
现有如下文件
Test_STDERR.sh (要执行的脚本) 用于输出重定向
Test_STDERR_script.sh (被调用的脚本) 用来产生错误输出
Test_STDERR_script.sh
echo "aaa"
whatthis #不存在的命令,用来产生错误
3.1)标准错误输出到终端,标准输出被重定向到输出文件
Test_STDERR.sh
./Test_STDERR_script.sh 2>&1 > ./Test_STDERR_print.txt
Result:
执行./Test_STDERR.sh
查看Test_STDERR_print.txt
./Test_STDERR.sh
./Test_STDERR_script.sh: line 2: whatthis: command not found ##标准错误输出到终端
cat Test_STDERR_print.txt ##标准输出被重定向到输出文件
aaa
3.2)标准输出被重定向到输出文件,标准错误输出也被重定向到输出文件
Test_STDERR.sh
./Test_STDERR_script.sh > ./Test_STDERR_print.txt 2>&1
Result:
执行./Test_STDERR.sh
查看Test_STDERR_print.txt
./Test_STDERR.sh ##终端没有输出
cat Test_STDERR_print.txt
aaa
./Test_STDERR_script.sh: line 2: whatthis: command not found ##标准输出,标准错误输出都被重定向到输出文件