shell 学习笔记--未完待续

Shell 是什么
 
Shell 是指一种命令行解释器,是为用户和操作系统之间通信提供的一种接口
 
分类
  1. 图形界面shell(graphical user interface)
  2. 命令行shell (Command Line Interface ) 即CLI
 
Shell不只是解释器,还是一种脚本语言(解释型语言)
 
工作模式:
  1. 互动模式
  2. 脚步模式
互动模式:由系统管理人员直接通过键盘输入命令,并等待其执行在一个命令
脚步模式:设计出一个脚步文件,将所有需要执行命令写在该文件中,由bash shell读取并执行
 
Shell 内建命令
 
bash, :, ., [, alias, bg, bind, break, builtin, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit,export, fc, fg,
getopts , hash, help, history, jobs, kill, let, local, logout, pops, printf, pushed, pwd, read,redonly, return, set, shift,shopt, source, suspend, test, times,
trap, rype, typeset, ulimit, smash,unalias,unset,wait
 
 
export 使变量能被子shell识别
//编写脚本export.sh内容
#!/bin/bash
echo $var
 
//执行脚本,结果变量为空
$ ./export.sh
 
// 赋值变量
$ var=100
$ echo $var
100
 
//查看变量是否变化
$ bash export.sh
 
//export 导出变量
$ export var=100
$ bash export.sh
100
 
echo $? 查看上次返回值
#!/bin/bash
function func_01 {
    return 01
}    
# 调用函数
func_01
# 查看之前函数的返回值
echo $?
 
 
查看bash版本信息
#系统中使用的shell
$ bash
bash-3.2
 
$ echo $SHELL
/bin/bash
bash-3.2
 
# 查看bash shell版本信息(1)
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
bash-3.2
# 查看bash shell版本信息(2)
$ echo $BASH_VERSION
3.2.57(1)-release
 
 
shell编程基础
 
  • shell 变量
  • shell 传递参数
  • Shell 数组
  • Shell 运算符
  • shell echo 命令
  • Shell printf命令
  • shell test命令
  • shell 流程控制
 
变量
  1. shell变量:弱类型(声明变量时不需要指定变量的类型)
  1. 类型
    1. 局部变量
    2. 环境变量(全局变量)(默认)
        局部变量:指在某个shell中有效的变量,在其他shell中来说没有关系与作用,随着shell消息也跟着消失,作用范围限定在声明的某个shell中
        环境变量:也称全局变量,shell脚本中默认是环境变量
        若需子shell集成当前shell变量,可用export命令到导出为环境变量
        注意:环境变量只能向下传递,不能向上传递(传子不传父)
 
$BASH — bash shell 全路径
$ echo $BASH
/bin/bash
$BASH_VERSION — bash shell 版本
$BASH_VERSION
3.2.57(1)-release
 
$CDPATH — 快速进入某个目录
 
 
$EUID — 记录当前用户UID;root 值为0
$ echo $EUID
501
$FUNCNAME — 在用户函数体内部,记录当前函数体的函数名
#!/bin/bash
function func_01 {
    echo $FUNCNAME
}    
# 调用函数
func_01
 
./export.sh
func_01
 
$HISTCMD  — 记录下一条history命令中的编号
  512  history
 
$ echo $HISTCMD
515
 
$HISTFILE — 记录history命令记录文件的位置
$HISTFILESIZE — 设HISTFILE文件记录命令的行数
$HISTSIZE — 缓冲区大小
$HOSTNSME — 展示主机名
$HOSTTYPE — 展示主机架构
$MACHTYPE — 主机类型GPU标示
$LANG — 设置当前系统语言环境
$PWD — 当前目录
$OLDPWD — 记录之前目录
$PATH — 代表命搜索的路径
$PS1 — 命令提示符
 
标识符代码 含义
\W 当前工作目录的basename
\w 当前工作目录的全路径
\d 日期,格式:“周 月 日”
\H 完整的主机名
\h 主机名
\t 24小时制的时间,格式:HH:MM:SS
\T 12小时制的时间
\u 当前用户的用户名
\$ UID为0 显示“#”,否则显示“$”
变量命名
规则:
    1. 必须以字母或下划线开头
    2. 长度没限制
    3. 不能喝shell的预设变量重名
    4. 不能使用shell的关键字
    5. 不能特殊字符开头
    6. 不能以数字开头
 
变量赋值与取值
 
# 定义:变量名=变量值
$name=john
# 注意:变量名与变量值之间用=等号相连不能有空格
$ name = john
-bash: name: command not found
 
#变量值包含空格的,可以用双引号 或单引号包含 ,否则报错
$ name=“jihan”
$ name='hi jihan'
$ name="hi jihan”
 
$ name=hi jihan
-bash: jihan: command not found
 
 
使用 ${ } 获取变量值 是一种保险的方式
bash-3.2$ name="hi jihan"
bash-3.2$ echo ${name}
hi jihan
bash-3.2$ echo name
name
shell具有弱变量特性,没有预先声明变量也可以引用
 
取消变量 — unset
 
bash-3.2$ name="hi jihan"
bash-3.2$ echo ${name}
hi jihan
 
# 取消变量/函数
bash-3.2$ unset name
bash-3.2$ echo ${name}
 
特殊变量
    1. 位置参数
    2. 脚本或命令返回值 ¥?— 上一个命令的返回值
 
数组
shell中的数组对元素个数没有限制,担支持一维数组
定义: declare 定义数组array,下标从0开始
 
bash-3.2$ declare -a Array
bash-3.2$ Array[0]=0
bash-3.2$ Array[1]=1
bash-3.2$ Array[2]="hi jihan"
bash-3.2$ echo $Array
0
bash-3.2$ echo $Array[0]
0[0]
 
# 获取数组元素必须使用 ${ } 方式
bash-3.2$ echo ${Array[0]}
0
    1. 一次性获取所有元素的值
    • echo ${Array[@]}
bash-3.2$ echo ${Array[@]}
0 1 hi jihan
    • echo ${Array[*]}
bash-3.2$ echo ${Array[*]}
0 1 hi jihan
 
    1. 获取数组长度 — 使用”#“
bash-3.2$ echo ${#Array[*]}
3
 
    1. 数组截取
bash-3.2$ echo ${Array[*]:1:2}
1 hi jihan
    1. 连接数组
bash-3.2$ Name[0]='hi name’
 
#使用()括号括起来,赋值给一个新变量,实现连接数组合并
bash-3.2$ Con=(${Array[*]}  ${Name[*]})
 
# 默认取出第一个
bash-3.2$ echo ${Con}
0
 
#取出全部
bash-3.2$ echo ${Con[*]}
0 1 hi jihan hi name
 
#注意: 两个数组存在元素值相同时,并没有去重处理
bash-3.2$ Name[1]=1
bash-3.2$ Con=(${Array[*]}  ${Name[*]})
bash-3.2$ echo ${Con[*]}
0 1 hi jihan hi name 1
    1. 替换元素
 
#只需要将需求修改元素值,以 “取出全部数组” + “/” + 旧元素值 + “/” + 新元素值 ,然后用()括起来赋值回当前数组变量就可以
bash-3.2$ Array=(${Array[*]/hi jihan/hijian})
 
bash-3.2$ echo  ${Array[*]}
0 1 hijian
    1. 取消数组或元素
bash-3.2$ echo ${Name[*]}
hi name 1
bash-3.2$ unset Name[1]
bash-3.2$ echo ${Name[*]}
hi name
 
posted @ 2019-11-29 18:21  洪先森  阅读(222)  评论(0编辑  收藏  举报