文章目录
  1. 1. Shell Script
    1. 1.1. 基础
    2. 1.2. 代码练习放在新库中
    3. 1.3. source VS bash
    4. 1.4. 判断式
      1. 1.4.1. test [option] file &&/|| function
      2. 1.4.2. 判断符号[]
    5. 1.5. Shell Script 默认变量
      1. 1.5.1. shift变量号偏移
    6. 1.6. if then fi

Shell Script

基础

0x1. 条件
编写的shell.sh需要rx权限
0x2. 执行
1.绝对/相对路径
2.export $PATH 直接执行
3.bash shell.sh
0x3. 文件规范

这行用来声明使用bash语法,运行时可加载bash环境
#!/bin/bash

代码练习放在新库中

  • sh02.sh
    Standard input and output.
  • sh03.sh
    随日期变化创建具时间的文件名
  • sh04.sh
    数值运算
    declare 定义变量类型

    declare -i total=$firstnum*$secondnum

直接用两个小括号(())brakets来代替
这种写法需要记住!

variable=$(($a*$b))

source VS bash

这两者都可以执行脚本,但是bash会创建一个新的bash环境(子进程)供script使用,而source则是直接执行script.
script中的变量也就类似于main()函数中的子函数(bash-script)和主函数(source script)中变量的关系了.
=>sh02.sh为例

1
read -p "xxx" firstname

source sh02.sh 中的firstname在执行完之后依然存在,
而bash sh02.sh中的变量就消失了

不注销用source ~/.bashrc改变变量的原因也就是这个了

判断式

test [option] file &&/|| function

sh05.sh 判断文件名是否存在,是目录还是文件,并判断执行者的权限
常用[option]:-e 存在性 -f file -d dirctory
-a all 同时成立 -o optional 一个成立即可 ! 反向状态 01互换

  • 其他的参数在这=> test
    man了一下test,发现也没有找到test指定路径或者递归的做法,
    即test只能判断当前目录下的文件,也不支持通配符一类的东西

判断符号[]

中括号[]基本和test用法一样,不过在if then fi中更常用
需要注意:

  • 中括号内部每个单位均需要空格 隔开
  • 中括号内部组件的变量和常量需要"或者'框起来

原因可以用这个解释:

1
2
3
4
name='quentin smith'
[ $name == "quentin" ]
#错误提示
bash: [: 参数太多

将name变量用字符串代换就知道错误了

  • sh06.sh
    判断用户输入并给予不同的结果

Shell Script 默认变量

1
2
3
4
5
6
7
#A
/path/to/scriptname option1 opt2 opt3 opt4 ...
$0 $1 $2 $3 $4
#B
$# 代表参数个数
[email protected] 代表内置变量A中的内容
$* 比'#@'用法广,代表"$1c$2c$3..." c为分隔符
  • sh07.sh
    创建一个具有可选[option]的shell script

shift变量号偏移

即原来的号码增加shift的数量

  • sh08.sh
    shift演示

if then fi

后面因为只要有语言基础的都懂,就不具体讲了

  • sh06-2.sh
    这里的&&||和前面基础bash中的&&||不要搞错了,含义不同
    基本格式:
    1
    2
    3
    4
    5
    6
    if [ assertions ]; then
    command
    (elif [ assertions ]; then
    command)
    else
    fi

+sh10.sh
判断本机端口的开放情况
下面的是获取主机启动的服务

netstat -tuln

获取之后的格式:
1.封包格式(tcp udp.etc) 2.收发包 3.本地IP:port 4.远程ip:port 是否监听
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
22的ssh端口表示任意远程ip的任意端口都能连接

文章目录
  1. 1. Shell Script
    1. 1.1. 基础
    2. 1.2. 代码练习放在新库中
    3. 1.3. source VS bash
    4. 1.4. 判断式
      1. 1.4.1. test [option] file &&/|| function
      2. 1.4.2. 判断符号[]
    5. 1.5. Shell Script 默认变量
      1. 1.5.1. shift变量号偏移
    6. 1.6. if then fi