前言
总结了工作中遇到的一些shell使用情况,不定期更新,留作后续参考。
总结
- shell函数以及传参
#/bin/bash
# 函数形式
add(){
# 参数 1
para1=$1
# 参数 2
para2=$2
# 参数处理
sum=`echo "$para1 $para2"|awk '{printf("%d",$1+$2)}'`
echo $sum
# 返回,注意,只能是整数0~255
return 0
}
# 调用函数 add
add 1 2
# 打印执行结果(即为return 的返回值)
echo $?
# 想要得到函数处理结果,尤其是需要获取字符串时,可以使用此方式
a=$(add 1 2)
echo $a
return:“假的”返回; echo:“真的”返回
- 数组
array=(1 2 3 "a" b c)
for i in ${array[*]}
do
echo $i
done
- case
input=1
case $input in
1)
echo "one"
;;
2)
echo "two"
;;
3|4|5|6)
echo "$input"
;;
*)
echo "not find"
;;
esac
- if
# [[]]中间的条件需要和左右括号各间隔一个空格
if [[ 条件1 ]]; then
elif [[ 条件2 ]]; then
else
fi
- 调用linux指令,并捕获返回值
a=`ls`
a=`cat 1.txt`
a=$(ls)
- 字符串处理
a="1/2/3.txt"
# 删除掉最后一个 / 及 / 左边的字符串,得到 3.txt
b=${a##*/}
# 删除最后一个 / 及 / 右边的字符串,得到 1/2
c=${a%/*}
# 删除最后一个 . 及 . 右边的字符串,得到 3
d=${b%.*}
# 从第4位开始截取a, 得到/3.txt
echo ${a:3}
# 获取字符串a的长度
echo ${#a}
# 大写转小写
tst="THIS IS A TEST"
tst2=`echo "$tst" | awk '{print tolower($0)}'`
# 小写转大写
tst3=`echo "$tst2"| awk '{print toupper($0)}'`
参考博客https://www.cnblogs.com/yutingliuyl/p/7236501.html
- 询问
a=1
if [[ a==1 ]]; then
echo -e "
"
# 打印红色提示
printf " 33[0;31mWarning: a=$a 33[0m";
echo -e "
"
# 询问是否继续
read -r -p "Are you sure to be continue? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
echo "ok, let's continue"
echo "-----------------------------------------"
;;
[nN][oO]|[nN])
exit 0
;;
*)
echo "Invalid input..."
exit 1
;;
esac
fi
- 运算符
-e file/dir 判断文件或文件夹是否存在,如果是,返回true
$a -eq $b 判断a是否等于b,等于则返回true
$a -ne $b 判断a是否不等于b,等于则返回false
$a -gt $b 判断a是否大于b,如果是,返回true
$a -lt $b 判断a是否小于b,如果是,返回false
$a -ge $b 判断a是否大于等于b,如果是,返回true
$a -le $b 判断a是否小于等于b,如果是,返回true
- 多行注释
:<<EOF
这是注释
EOF
多行注释还有其它形式,具体可以参考菜鸟教程
- 传递参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如"$*"用__"__括起来,以"$1 $2 ... $n"的形式输出所有参数
$$ 脚本运行的当前ID号
$! 后台运行的最后一个进程的ID号
#@ 与__$*__相同,但是使用时加引号,并在引号中返回每个参数。如"#@"用__""__括起来,以"$1" "$2" ... "$n" 的形式输出所有参数
$- 显示Shell使用的当前选项,与__set__命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其它任何值表示有错误。