shell 脚本
-
who,会展示当前登录用户,当你用ssh登录的时候
-
cat > nusers,将cat的输出重定向到nusers文件
-
命令 -选项 参数 基本命令格式
-
不同命令用分号分隔,如果是&号,就会在后台执行前面的命令,不等前面的命令执行完成,就执行下一个命令
-
变量的赋值方式为:先写变量名称,紧接着=字符,最后是新值,中间完全没有任何空格,当所赋予的值内含空格时,请加上引号
-
取出变量的值使用$
-
当变量的值作为其他变量的值的时候,不需要使用引号,但是使用了双引号也没关系,但是将几个变量连接起来的时候,就需要使用引号了
-
printf标准化输出 printf format-string [arguments …] 例如:printf “%s, %s!\n” hello world
-
cat命令,当cat命令无参数的时候,默认输入是标准输入,即键盘输入屏幕,默认输出是标准输出,即输出至屏幕
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-At05u6eN-1587354051332)(en-resource://database/723:0)] -
使用< 可以改变标准输入,基本形式为program < file
-
同理, 使用 > 可以改变标准输出,基本形式为program > file 例如命令:
tr -d '\r' < dos-file.txt > UNIX-file.txt
这条命令先以tr将dos-file.txt里的回车删除,再将处理好的数据输入到UNIX-file.txt
'>'重定向符的目的文件不存在时,会新建一个。如果目标文件已存在,就会覆盖掉
'>>'重定向符的目的文件不存在时,会新建一个。如果目标文件已存在,就会在文件后面添加
- program1 | program2 可将program1的标准输出作为program2的标准输入
- 特殊文件/dev/null,传送到此文件的数据都会被丢弃掉,从此文件读取的数据只有文件结束符号
- shell会沿着path查找命令
- shell 脚本的参数是’$'符号+整数,例如$0,大于9的整数要使用大括号
- grep会列出第一个参数的每一行
- 命令追踪:
#! /bin/sh
set -x 打开跟踪功能
echo 1st echo 做些事
set +x 关闭跟踪功能
echo 2nd echo 再做些事
输出:
- echo 1st echo 被跟踪的第一行
1st echo 输出 - set +x 这行命令执行后才关闭跟踪,因此这行也被跟踪了
2nd echo 下一行的输出
- grep 使用固定字符串查询 grep -F [字符串] 默认行为即-F
- grep 使用扩展正则表达式进行匹配 grep -E [正则表达式]
- sort 行的排序
- export 把变量放进环境,供所有执行中的程序使用,新的进程会从其父进程继承环境,也可以在建立新的子进程之前修改它。
脚本入参
$<数字>
,数字表示执行脚本命令使用的字符串,$0
就是输入的第一个字符,例如脚本为:
# test.sh
#!/bin/bash
echo "$0"
在文件路径下执行会是:
往上走一级是:
其余的$1
,$2
,就是第一个,第二个参数
- $$:shell自身的进程ID
- $!: shell最后运行的后台的进程ID
- $?:shell最后运行的命令代码的返回值
- $@:列出传给shell脚本的所有参数值
- $#:传给shell脚本的参数个数
判断
条件表达式
表达式 | 实例 |
---|---|
[ expression ] | [1 -eq 1] |
[[ expression ]] | [[1 -eq 1]] |
test expression | test 1 -eq 1,等同[] |
Note: 括号中的表达式前后都有空格,否则会报错!
整数比较符
比较符 | 描述 | 实例 |
---|---|---|
-eq, equal | 等于 | [ 1 -eq 1 ] 为true |
-ne, not equal | 不等于 | [ 1 -ne 1 ] 为false |
-gt, greate than | 大于 | [ 1 -gt 1 ] 为false |
-lt, lesser than | 小于 | [ 1 -lt 1 ] 为false |
-ge, greate or equal | 大于或者等于 | [ 1 -ge 1 ] 为true |
-le, lesser or equal | 小于或者等于 | [ 1 -le 1 ] 为true |
字符串比较符
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 | [ “a” == “a” ] 为true |
!= | 不等于 | [ “a” != “a” ] 为false |
-n | 字符串长度不等于 0 为真 | VAR1=1;VAR2=”” [ -n “$VAR1” ]为 true [ -n “$VAR2” ]为 false |
-z | 字符串长度等于 0 为真 | VAR1=1;VAR2=”” [ -z “$VAR1” ]为false [ -z “$VAR2” ]为 true |
注意:使用-n 判断字符串长度时,变量要加双引号,养成好习惯,字符串比较时都加上双引号
文件测试
测试符 | 描述 | 实例 |
---|---|---|
-e | 文件或者目录存在为真 | [ -e path ] path 存在为 true |
-f | 文件存在为真 | [ -f file_path ] 文件存在为 true |
-d | 目录存在为真 | [ -d dir_path ] 目录存在为 true |
-r | 有读权限为真 | [ -r file_path ]file_path有读权限为真 |
-w | 有写权限为真 | [ -w file_path ]file_path有写权限为真 |
-x | 有执行权限为真 | [ -x file_path ]file_path有执行权限为真 |
-s | 文件存在且不为空为真 | [-s file_path]file_path存在且不为空为真 |
布尔运算符
运算符 | 描述 | 实例 |
---|---|---|
! | 非关系,条件结果取反 | [ ! 1 -eq 2 ]为true |
-a | 和关系,在[]表达式中使用 | [ 1 -eq 1 -a 2 -eq 2 ]为true 两者都为真才为真 |
-o | 或关系,在[]表达式中使用 | [ 1 -eq 1 -o 2 -eq 1 ]为true 两者有一真则为真 |
流程控制
while语句
while condition
do
command
done
for 语句
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
case
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
nohup
nohup后台启动一个java
nohup java -jar mail-0.0.1-SNAPSHOT.jar &
关闭后台进程
# 强行终止
kill -9 pid
# 发送终止命令
kill -15 pid
查看端口进程
lsof -i:**