Shell脚本基础

Shell脚本基础

变量

什么是变量?

变量即可以变化的量

变量名称注意事项

  • 只能包含字母、数字、下划线,并且不能以数字开头
  • 不应该跟系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要用“_”下划线开头
  • 最好做到见名知义
  • 不能使用程序中的保留字,例如if、for等

变量类型

  • 字符型
  • 数值型
    • 整型
    • 浮点型
  • 布尔型

变量操作

  • 设置变量
  • 引用变量
  • 撤销变量

单引号与双引号的区别

bash变量类型

  • 环境变量
  • 本地变量(局部变量)
  • 位置变量
  • 特殊变量(bash内置的,用来保存某些特殊数据的变量,也称系统变量)

本地变量

VAR_NAME=VALUE      //本地变量,作用域为当前shell进程。对当前shell外的其它shell进程,包括当前shell的父shell、子shell进程均无效

local VAR_NAME=VALUE    //局部变量,作用域为当前代码段,常用于函数

环境变量

export VAR_NAME=VALUE   //作用域为当前shell进程及其子进程

[root@node0 ~]# export a=1
[root@node0 ~]# echo $a
1
//启用子进程
[root@node0 ~]# bash
[root@node0 ~]# echo $a
1 #依然生效

位置变量

$1 $2 //用来引用脚本的参数 数字代表位置
shift [num] //使用完后退出,后面向前推进

[root@yqh ~]# cat test.sh
#!/bin/bash
for i in $*;do
echo $1
shift 2
[root@node0 ~]# ./test.sh a b c d e #传递5个参数循环5次,位置1执行参数是a,向后推2个是c,再就是e,e后面没有参数,则再输出2次e完成
a
c
e
e
e

特殊变量

$#      //是传给脚本的参数个数
$0      //是脚本本身的名字
$!      //是shell最后运行的后台Process的PID
$@      //是传给脚本的所有参数的列表
$*      //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$      //是脚本运行的当前进程ID号
$?      //是显示上条命令的退出状态,0表示没有错误,其他表示有错误

bash内建环境变量

PATH #寻找命令路径
[yqh@yqh ~]$ echo $PATH
/home/yqh/.local/bin:/home/yqh/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbinSHELL #查看当前shell
[yqh@yqh ~]$ echo $SHELL
/bin/bash

UID #查看当前用户uid
[yqh@yqh ~]$ echo $UID
1000

HISTSIZE #查看可存储历史记录总大小
[yqh@yqh ~]$ echo $HISTSIZE
1000

HOME #查看当前用户家目录
[yqh@yqh ~]$ echo $HOME
/home/yqh

PWD #查看用户当前所在位置
[yqh@yqh /]$ echo $PWD
/

HISTFILE #查看当前用户历史记录文件储存位置
[yqh@yqh /]$ echo $HISTFILE
/home/yqh/.bash_history

PS1 #定义系统提示符的变量
[yqh@yqh /]$ echo $PS1
[\u@\h \W]\$

写脚本的思路

编写流程

  • 先手动部署确立完成思路
  • 分类和分析
  • 通用性
  • 写脚本
    • 开2个终端,一个写脚本,一个测试
  • 测试
    • 功能写完后立即测试(运行2遍以上确保通用性)

shell脚本编程注意事项

  • 指定bash(#! /bin/bash)可能出现默认sh不是bash的情况

  • 禁止将未执行的代码直接写入脚本

  • 脚本中的命令一定要用绝对路径

  • 注意local,bash中如果不在变量前添加local默认是全局变量,添加后只在当前代码段生效

  • 使用sheelcheck检查语法

Shell脚本基础

上一篇:RK: rk3288 以太网mac 地址


下一篇:进程&线程 同步异步&阻塞非阻塞