目录
- 1、cat <<EOF
- 2、echo -e
- 3、$#、 $@、 $* 、 $?
- 4、测试的demo
1、cat <<EOF
cat命令表示查看,而cat <<EOF命令表示将进行输入,直到以EOF终止符来结束输入(最后的新行)。EOF必须写在一行的头部,前面不能有制表符或者空格。如果结束符EOF前面有制表符或者空格,则EOF不会被当做结束符,只会被视为继续输入的状态。
cat <<EOF > test.txt
123
123
123
EOF
2、echo -e
参考文章:https://blog.csdn.net/qq_36412526/article/details/111411270
-e:激活转义字符。使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
•\a 发出警告声;
•\b 删除前一个字符;
•\c 最后不加上换行符号;
•\f 换行但光标仍旧停留在原来的位置;
•\n 换行且光标移至行首;
•\r 光标移至行首,但不换行;
•\t 插入tab;
•\v 与\f相同;
•\ 插入\字符;
•\nnn 插入nnn(八进制)所代表的ASCII字符;
3、$#、 $@、 $* 、 $?
参考文章:https://zhuanlan.zhihu.com/p/527179594
sh 2.sh a b c
- $# 会获取到 3,对应传入脚本的参数个数,统计的参数不包括 $0。
- $@ 会获取到 “a” “b” “c”,也就是所有参数的列表,不包括 $0。
- $* 也会获取到 “a” “b” “c”, 其值和 $@ 相同。但 $*和 $@有所不同。 $*把所有参数合并成一个字符串,而 $@会得到一个字符串参数数组。
- $? 可以获取到执行 sh 2.sh a b c 命令后的返回值。在执行一个前台命令后,可以立即用 $? 获取到该命令的返回值。该命令可以是系统自身的命令,可以是 shell 脚本,也可以是自定义的 bash 函数。
- 当执行系统自身的命令时,$? 对应这个命令的返回值。
- 当执行 shell 脚本时,$? 对应该脚本调用 exit 命令返回的值。如果没有主动调用 exit 命令,默认返回为 0。
- 当执行自定义的 bash 函数时,$? 对应该函数调用 return 命令返回的值。如果没有主动调用 return 命令,默认返回为 0。
#!/bin/sh
if [ $# -eq 0 ];then
echo "shell has not args"
else
echo "shell has args"
fi
echo "* = $*"
echo "@ = $@"
for arg in $@
do
case $arg in
a)
echo "a in args"
;;
*)
echo "------"
;;
esac
done
4、测试的demo
C="hello shell sss"
if [ ! -z "$C" ] ; then
echo "ok"
for c in $C
do
if [ $(echo $c |grep -c "hello") -eq 1 ] || [ $(echo $c |grep -c "sss") -eq 1 ]; then
if [ -e "./test.txt" ];then
echo "file is exist"
fi
touch test.txt #create a file
echo $c > test.txt
else
echo $c > test.txt
fi
done
fi