- operation
bash a.sh [参数直接添加]
- 引申
- [` `]倒引号,被括起来表示是需要执行的命令
- [" "]双引号,里面出现$(表示取变量名)、`(表示执行命令)、\(转义),其余的表示字符串
- [' ']单引号,里面所有的都表示字符串,包括特殊字符
- linux 不挂断执行shell
# nohup命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup command &
# nohup 和 &的区别
nohup # 不挂断的运行,单独的nohup没有后台运行的意思。
& # 在后台运行 当用户退出或者挂起的时候,命令跟着退出
- 字符串截取操作汇总
# ${status}* 匹配result字符串中以status变量为开头的子字符串,同时匹配这个开头后面的任意字符(包括空字符)。
# % 表示从result结尾处执行截取操作,删除最短匹配{status}*的子串,并返回剩余的部分。如果没有匹配到,则返回原字符串。
# 例 $result 的值为 hello-world, status的值为‘world‘,则‘{result%${status}}的值为hello-,因为在 $result 中,匹配 ${status}所得的最短子串为-world,将其删除后,剩下的字符串就是hello-`。
code=${result%${status}*}
- if-elif-else
- 不含参
# 查看当前目录是否存在a.sh文件
if ls -l a.sh; then
echo "ls return true"
elif [ 表达式 ]
then
echo "..."
else
echo "ls return false"
fi
echo "all"
- 含参数
# 字符串比较 =或者==
# 运算符两边要有空格
# 字符串两边要有空格,才会被解析
# []内两边要有空格
if [ "$1" = "me" ];then
echo "You are female..."
else
echo "$1 is male..."
fi
- 字符串比较:==、=、!=
- 整数比较:
-lt # 小于
-le # 小于等于
-gt # 大于
-ge # 大于等于
-eq # 等于
-ne # 不等于
- 逻辑判断:&&、||、!
- for循环
- while循环
- $常量
while [ "$1" = "me" ];
do
echo "num=$1"
break # 终止循环
done
- $变量
i=7
j=10
while[ $i -lt $j ]
do
echo "num1=$i,num2=$j"
((i++))# 单括号不被解析
done
- dirname、$0使用
# dirname 指定脚本所在的路径
# $0 当前脚本的名称(包括后缀名,默认带包路径)
# `basename $0` 直接显示脚本名称,不带包路径
# $(命令)返回该命令的结果
dir=`dirname $0`
echo $dir
- 文件测试运算符
# 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是则返回true
-f filename
# 案例:
if [ -f `dirname $0` ];then
echo "common"
else
echo "not common"
- $?使用
# $?获取上一个命令的退出状态
# 步骤1:
exit 0
# 步骤2:
if [ $? == "0" ]
then ...
- ln -s使用
# 软连接
# ln -s 源文件 目标文件
# 作用:
# 1.为某一个文件在另外一个位置建立一个`副本`,`副本`并不占用内存。
# 2.而且,`副本`内容和源文件是同步的。
# 3.若目标文件不存在,自动帮你创建文件
vi source.log
ln -s source.log target.log
- > 和 >>
# > 创建
# >> 追加
echo 'hello shell' > out.txt
# > 和 >> 都会默认创建out.txt
# > 将字符串保存到out.txt中,当out.txt存在时,首先将原文件内容清空,再追加
# >> 将字符串直接追加到文件的末尾
- expr
# expr实现数值运算、数值和字符串比较、字符串匹配、字符串提取、字符串长度计算等
# expr 算术表达式优先级低于字符串表达式、高于逻辑关系表达式
CNT=1
CNT=`expr $CNT + 1`
- 新建文件夹,如果文件夹名称出现^M或者?
# 首先打开配置文件或者shell查看当前 文件的格式
vi a.sh
# 查看文件格式
:set ff
# fileformat=dos 表示是windows下的文件需要转化为linux文件
# 修改文件格式为unix
:set ff=unix # 或者 :set fileformat=unix
# 直接保存退出即可
- $$、$!、$?、$*、$@、$#、$0
# $$ Shell本身的PID(ProcessID)
# $! Shell最后运行的后台Process的PID
# $? 前一次运行的命令的结束代码(返回值)
# $* 所有参数列表。
# $@ 所有参数列表。
# $0 当前脚本的文件名
# $1...$n 分别是第一个参数...第n个参数
- 使用 "x",防止字符串比较出现语法错误
# 如果不使用"x"当参数file为空字符串时,会出现 if[ == "0" ]的语法错误
[[ "x"${file} = "x""file"]]
- find
# find 在指定目录下查找文件
# 语法 find path -option [ -print ]
# 搜索深度 -maxdepth 1 当前目录
# 搜索名字 -name *.zip 允许模糊查询
# 指定文件类型 -type f 一般文件
# 输出命令 printf 独立的命令 允许格式化字符串 可以手动添加换行符
find [目录] -maxdepth 1 -name "*.zip" -type f -printf "%f\n"
# windows上传文件到linux存在格式问题
sed -i 's/\r//g' filename