shell脚本

shell 脚本

  1. who,会展示当前登录用户,当你用ssh登录的时候

  2. cat > nusers,将cat的输出重定向到nusers文件

  3. 命令 -选项 参数 基本命令格式

  4. 不同命令用分号分隔,如果是&号,就会在后台执行前面的命令,不等前面的命令执行完成,就执行下一个命令

  5. 变量的赋值方式为:先写变量名称,紧接着=字符,最后是新值,中间完全没有任何空格,当所赋予的值内含空格时,请加上引号

  6. 取出变量的值使用$

  7. 当变量的值作为其他变量的值的时候,不需要使用引号,但是使用了双引号也没关系,但是将几个变量连接起来的时候,就需要使用引号了

  8. printf标准化输出 printf format-string [arguments …] 例如:printf “%s, %s!\n” hello world

  9. cat命令,当cat命令无参数的时候,默认输入是标准输入,即键盘输入屏幕,默认输出是标准输出,即输出至屏幕
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-At05u6eN-1587354051332)(en-resource://database/723:0)]

  10. 使用< 可以改变标准输入,基本形式为program < file

  11. 同理, 使用 > 可以改变标准输出,基本形式为program > file 例如命令:

tr -d '\r' < dos-file.txt > UNIX-file.txt

这条命令先以tr将dos-file.txt里的回车删除,再将处理好的数据输入到UNIX-file.txt
'>'重定向符的目的文件不存在时,会新建一个。如果目标文件已存在,就会覆盖掉
'>>'重定向符的目的文件不存在时,会新建一个。如果目标文件已存在,就会在文件后面添加

  1. program1 | program2 可将program1的标准输出作为program2的标准输入
  2. 特殊文件/dev/null,传送到此文件的数据都会被丢弃掉,从此文件读取的数据只有文件结束符号
  3. shell会沿着path查找命令
  4. shell 脚本的参数是’$'符号+整数,例如$0,大于9的整数要使用大括号
  5. grep会列出第一个参数的每一行
  6. 命令追踪:
#! /bin/sh
set -x              打开跟踪功能
echo 1st echo   做些事
set +x              关闭跟踪功能
echo 2nd echo   再做些事

输出:

  • echo 1st echo 被跟踪的第一行
    1st echo 输出
  • set +x 这行命令执行后才关闭跟踪,因此这行也被跟踪了
    2nd echo 下一行的输出
  1. grep 使用固定字符串查询 grep -F [字符串] 默认行为即-F
  2. grep 使用扩展正则表达式进行匹配 grep -E [正则表达式]
  3. sort 行的排序
  4. export 把变量放进环境,供所有执行中的程序使用,新的进程会从其父进程继承环境,也可以在建立新的子进程之前修改它。

脚本入参

  1. $<数字>,数字表示执行脚本命令使用的字符串,$0就是输入的第一个字符,例如脚本为:
# test.sh
#!/bin/bash
echo "$0"

​ 在文件路径下执行会是:

image-20201026201123928

​ 往上走一级是:

image-20201026201204574

​ 其余的$1$2,就是第一个,第二个参数

  1. $$:shell自身的进程ID
  2. $!: shell最后运行的后台的进程ID
  3. $?:shell最后运行的命令代码的返回值
  4. $@:列出传给shell脚本的所有参数值
  5. $#:传给shell脚本的参数个数

判断

条件表达式

表达式实例
[ expression ][1 -eq 1]
[[ expression ]][[1 -eq 1]]
test expressiontest 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

casein
模式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:**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值