1. 变量的设置规则
- myname=SunnyPoem
- name="$myname" #name=SunnyPoem
- nameA='$myname' #nameA=$myname
- nameB=$(uname -r) #其他命令提供的信息
- nameC=`uname -r`
- nameD="$name"abc #追加
- nameD=${name}abc
- echo $name #显示变量
- unset name #取消变量
2. 环境变量的功能
- env #查看环境变量
- $ #本 Shell 的 PID
- ? #上个执行的回传码 0, 上次执行成功
- set #查看所有变量(含环境变量和自定义变量)
- export #自定义变量转成环境变量
子进程仅会继承父进程的环境变量, 不会继承父进程的自定义变量.
如果要让变量内容继续在子进程中使用, 执行 export 变量名称.
3. 管道命令(pipe)
"|" 仅能处理经由前面一个命令传来的正确信息(standard output).
选取命令 cut,grep.
cut 同一行数据进行分解(处理信息以行为单位)
cut -d '分隔符' -f fields
cut -c 字符范围
- echo $PATH | cut -d ':' -f 3,5 #选出用':'分割的第 3 和第 5field
- eccho $PATH|cut -c 12- #第 12 字符后的所有字符串
grep 行中如果有我们需要的信息, 将该行拿出来
grep [-acinv] [--color=auto] '查找字符串' filename
-a : 将 binary 文件以 text 文件的方式查找数据
-c: 计算匹配的次数
-i: 忽略大小写
-n: 顺便输出行号
-v: 方向选择
4. awk
awk 以行为一次处理单位, 以字段为最小处理单位.
读入一行, 并将一行的数据填入 $0(一整行),$1(第一列)等变量中
依据条件, 判断是否执行后面的动作
做完所有的条件及动作
若有后续的行, 重复上面三个动作
awk '条件 1{动作 1} 条件 2{动作 2}'
内置变量:
NF: 每一行 ($0) 拥有的字段总数(列数)
NR: 目前 awk 处理第几行数据
FS: 目前的分隔符(默认空格键)
条件: 逻辑运算符
BEGIN: 预先设置 awk 的变量
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 <10 {print $1"\t "$3}'
5. 正则表达式
TODO
6. 数据流重定向
数据重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备中去.
标准输入: 代码为 0, 使用< 或<<(结束条件)
标准输出: 代码为 1, 使用>或>>(追加)
标准错误输出: 代码为 2, 使用使用>或>>(追加)
> 代码默认的代码是 1
- find /home -name .bashrc>list 2>list_error
- find /home -name .bashrc 2>/dev/null (错误信息忽略不存储)
- find /home -name .bashrc>list 2>&1 (标准输出和标准错误都重定向到 list 中)
- find /home -name .bashrc &>list(标准输出和标准错误都重定向到 list 中)
标准输入: 用某个文件代替键盘的输入
cat> catfile <~/.bashrc
命令执行的判断依据:
cmd;cmd 连续命令执行
cmd1&&cmd2: 若 cmd1 执行完毕并正确执行, 则开始执行 cmd2
若 cmd1 执行完毕并为错误, 则 cmd2 不执行
cmd1 || cmd2 : 若 cmd1 执行完并正确, 则 cmd2 不执行
若 cmd1 执行完并错误, 则执行 cmd2
cmd1 || cmd2 && cmd3: 如果 cmd1 正确则 cmd2 不执行, 此时 $?=0 继续后传, 故 && 遇上后, 执行 cmd3
7. shell script
shell script: 利用 shell 的功能所写的一个程序, 这个程序是使用纯文本文件, 将一些 shell 的语法与命令写在里面, 搭配正则表达式, 管道命令与数据流重定向等功能, 以达到我们所想的处理目的.
在子进程中执行:
直接命令行执行(脚本必须可读可执行 chmod a+x)./shell.sh
以 bash 进程来执行 bash shell.sh
在父进程中执行:
source shell.sh
第一行:#!/bin/bash
声明这个脚本使用的 shell 名称
# 批注
主要环境变量的声明
主要程序部分
告知执行结果
7.1 编写 shell script 的良好习惯
功能
版本信息
作者与联系方式
- shellname.sh opt1 opt2 opt3
- $0 $1 $2 $3
- $# : 参数个数
- #@ : 所有参数,
- if [];then
- action
- elif [];then
- action
- else
- action
- fi
- case $1 in
- "one")
- echo "one"
- ;;
- "")
- echo "You MUST input parameters,ex> {$0 word}"
- ;;
- *)
- echo "Usage $0 {word}"
- esac
- while []
- do
- action
- done
- until []
- do
- action
- done
- for var in con1 con2 con3 ...
- do
- action
- done
- for ((初始值; 限制值; 执行步长))
- do
- action
- done
来源: http://www.bubuko.com/infodetail-2747535.html