Shell字符串比较相等、不相等
1 | #!/bin/sh |
字符串比较,注意的几点
1 | if [ "$A" = "$B" ];then |
- if 和 [ ] 之间要有空格
- [ ] 和“ ”之间要有空格
- “ ”和 = 之间要有空格
否则都会报错
Shell分支语句 case···esac 语法
1 | case 值 in |
说明:case后为取值,值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束。
值可以为变量或常数。
模式支持正则表达式,可以用以下字符:1
2
3
4
5* 任意字串
? 任意字元
[abc] a, b, 或c三字元其中之一
[a-n] 从a到n的任一字元
| 多重选择
举例:1
2
3
4
5
6
7
8
9
10
11
12
13#!/bin/sh
case $1 in
start | begin)
echo "I am started!"
;;
stop | end)
echo "I am stopped!"
;;
*)
echo "Other command!"
;;
esac
/bin/bash^M: bad interpreter: No such file or directory
用 WebStorm 安装 shell 插件后,直接创建的 sh 文件,上传至服务器,执行时报错如下:1
-bash: ./syncToGiteeAsUTomcat.sh: /bin/bash^M: bad interpreter: No such file or directory
删除第一行,则报错如下:1
2
3
4
5./syncToGiteeAsUTomcat.sh: line 4: $'\r': command not found
./syncToGiteeAsUTomcat.sh: line 6: $'\r': command not found
./syncToGiteeAsUTomcat.sh: line 7: syntax error near unexpected token `$'{\r''
'/syncToGiteeAsUTomcat.sh: line 7: `pullLocalAndPushToGitee() {
}
解决:
- 在终端 vim 一个文件,将代码粘贴进去,保存。
- 或者,在终端 vim 一个文件,sz 到本地,然后再将代码粘贴进去,上传。
root 用户,以另外一个用户的身份执行脚本
1 | [root@centOS7BasicForTest source]# su - utomcat -lc "git push hjz" |
su -utomcat 会切换到用户主目录,所以提示并不是 git 仓库。
解决办法:
把需要的脚本放到一个 shell 文件,在 shell 脚本文件中 cd 到项目目录,再执行相关操作指令。
特殊变量列表
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
查目录下的文件个数
1 | #以下命令均不包含".",".."目录,以及"."开头的隐藏文件,如需包含,ll 需要加上 -a参数 |
变量
变量名=变量值
注意:变量名前面不应加美元“$”符号。(和PHP不同)
等号“=”前后不可以有空格。
和C语言不同,Shell中不需要显式的语法来声明变量。
变量名不可以直接和其他字符相连,如果想相连,必须用括号:echo “this is $(he)llo!”
linux下移动隐藏文件夹的操作
1 | mv * .[^.]* directory |
其中,directory 是要移到的目标文件夹。
命令解释:
mv
命令的最后一个参数是要移动文件的目标位置。- 第一个
*
匹配除了隐藏文件的所有文件。 - 隐藏文件使用
.[^.]*
匹配。 - 匹配隐藏文件用
.[^.]*
,为什么不用.*
,因为.*
会匹配目录.
和..
。 .[^.]*
的意思是:以.
开头,加不是.
的一个任意字符,再加其他任意字符。
如果知道隐藏文件夹名,则直接写就好了,比如:1
mv * .git directory
逻辑非、逻辑与、逻辑或
逻辑非:
!
1
2if [ !表达式 ]
if [ !-d $num ] 如果不存在目录$num逻辑与:
–a
if [表达式1 –a 表达式2]
1. 逻辑或:-o
if [表达式1 –o 表达式2]
linux shell 中的sleep命令
- sleep 1 睡眠1秒
- sleep 1s 睡眠1秒
- sleep 1m 睡眠1分
- sleep 1h 睡眠1小时
清空文本文件内容
: > filename
或> filename
: 清空 filename,如果文件不存在,则创建文件,“:”与“>”之间有无空格均可,“:”充当虚拟占位符,不产生任何输出。true > filename
:类似:> filename
truncate -s 0 filename
:truncate 用于调整文件大小,-s 0
,设置文件大小为0字节rf -f filename && touch filename
:通过删除原文件,再创建同名文件的方式清空文件
> filename
,这种方式最简洁,敲键盘次数最少,不过,某些 shell 中可能无法正常运行,如果 > filename
无法正常运行,就用 :> filename
,:
是 shell 内建命令,不需要安装额外的工具。