标签:bash脚本
shell 是 一种 控制系统的脚本语言, bash 是 shell语言 的 解释器 中 的 一种,也是 Linux 上 最流行的 的 一种, 不过 shell解释器 有 很多种, 而且 每一种 都有 自己 的 特色, 不 是 完全 一样 的。。,
常见shell:
sh、csh、tcsh、bash、ksh、dash、zsh
bash 常用快捷键:
Ctrl+a: 跳转命令行首
Ctrl+e: 跳转命令行尾
Ctrl+u: 删除命令行首至当前光标所在处的内容
Ctrl+k: 删除当前光标所有处至命令行尾的内容
Ctrl+l: 清屏,相当于clear命令
Ctrl+c: 取消或终止
Ctrl+z: 将当前命令送至后台执行
bash 命令补全
按 "tab" 键 可 进行 命令 补全, 连按 两下 可 显示 命令 补全 列表, 这个 还是 很方便 的
编写脚本,执行脚本:
bash 脚本 是 以 “#! /bin/bash” 开头 的, 因为 bash 脚本 是 一种 解释型 语言, 脚本 运行 时 需要 调用 解释器 来 执行 代码, "#!" 是 告诉 内核 这是 一个 脚本 文件, 后面 跟着 的 是 脚本 解释器 的 路径, 内核 会 调用 这个 解释器 去 执行 脚本。
练习 : 写 第一个 脚本 并 运行, 输出 一句 Hello word!
这里 习惯 使用 vim 编辑器, 所以 就 用 vim 的 了, 不会的 也 可以 用 nano, 脚本文件 应该 以 ‘ .sh ’ 作为 结尾, 这个 说明 他 是一个 脚本。。, 其实 以 普通 文件 写 脚本 一样 也是 可以 运行 的, 不过 可以运行 的 普通文件 一般会是 编译好了的二进制程序,所以 还是 以 ‘ .sh ’ 结尾 把, 这个 是 大家 默认 的。
大概 就这样 了, 简单 把, 这里 的 ‘#’号 是 代表 注释 的 意思, ‘#’ 号 后面 的 一句话 是 不会被 执行 的, 只有 ‘#!’ 和在一起 才表示 这是一个 脚本, 会被 内核 调用 bash解释器 执行 的。
这个就是我编写的脚本 a.sh ,首先检查一下脚本有没有语法错误
ok, 没有 显示 任何 信息, 说明 脚本 没有 错误, 执行 脚本, 这里 有 两种 方法可以 执行
方法1: 直接调用 bash解释器 去 解释 脚本
方法2: 给脚本添加一个可执行权限, 就可以直接执行脚本了, 不过 这里 需要 给出 脚本 的 准确 路径, 不过 可以 通过修改 PATH 文件, 这样 脚本 就可以 像 命令 一样 执行 了。
这里 我 自己 添加 了 一个 ‘./‘ 目录, 这样 就 可以 直接 执行 这个 脚本 了。。
bash 变量: 有几种: 本地变量,局部变量,环境变量,特殊变量,位置变量
1、本地变量:只对当前 shell 进程 有效,对其 子 shell 以及 其他 shell 都 无效
定义变量: [set]Var_Name="Value" ,set 是 定义 本地变量 的 关键字, 可省略 的默认定义 的 变两个 就是 本地变量
引用变量: ${Var_Name}, 这里的 大括号 大多数情况 可以 省略
撤销变量: unset Var_Name
显示变量: 直接执行 set 可以 显示 所有 本地变量
2、局部变量: 这个 应该 和 函数 有关 把, 这里 先不管 他。
定义变量: local Var_Name="Value"
3、环境变量:
定义变量: export Var_Name="Value"
显示环境变量: export, env, printenv 这三个 命令 都 可以 显示 环境变量,
4、位置变量
$1, ... , $n
这个 是 脚本 输入 的 参数, 各个 参数 之间 是 以 空格 分隔 的, $1 就 表示 脚本 的 第一个 参数
5、特殊变量
$0 脚本名称, 这个和变量位置差不多吧。
$? 上一条命令的执行状态,
0表示 成功
1-255 失败。。
$# 查看命令之后有几个参数
后面 三个 不知道。。, 老师 没讲, 用到的 时候 再说 把。
$$
$!
$*
ok, 写了个 脚本 测试 一下 特殊变量 和 位置 变量, 大概 就 这样 了。。
bash配置文件:
bash 启动 是 会 自动 执行 配置 文件 里面 的 一些 脚本, 用于 设置 一些 永久 的 属性信息
1 profile类: 为交互式登录的用户提供配置,登录系统时只执行一次,一会再运行bash会执行 了
/etc/profile : 对所有用户有效,一般用于管理员修改一些最基本的信息
/etc/profile.d/*.sh : 对所有用户有效, 这个 文件夹 下 的 .sh 文件 都会 被 执行,用于 设置一些软件的配置 之类 的
~/.bash_profile :个人家目录下也有 一个 这样 的 配置文件, 不过 是隐藏的
bashrc类: 非交互式登录用户提供配置
/etc/bashrc: 全局
~/.bashrc: 个人配置
通知shell重新读取配置文件: source FILE, 如 source .bashrc 之类 的。
--------------------------------------------------------------
系统启动时 配置文件读取顺序:
交互式登录用户:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录用户:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
变量的命名要求:
只能使用数字、字母和下划线组成;
不能以数字开头;
不能使用程序中的关键字;
见名知义;totalWeight
for循环:
这个是shell脚本中最常用的循环结构, 其他 还有 两个循环结构, 分别是 while 和 until, 不过 这里 直说 for 循环。
语法:
for循环:
for var_Name in 列表; do
语句1
语句2
...
done
大概 语句结构 就是 这个 样子 了, 其中 var_Name 表示 变量, in 后面 跟着 的 是一个 列表, for循环 就是 遍历 这个 列表 的, 列表 后面 有 一个 ‘;‘, 这个 是 shell 中 的 语句分隔符, 后面 的 do 就是 另外 一个 语句 了, 也可 以 把 do 另起一行, 这样 就 可以 省略 ‘;‘ 了, 如:
例1:
for I in 1 2 3 4 5 6 7 8 9
do
echo $I
done
说下 这个 例子 把。
第一行, for 关键字 代表 这 是一个 循环 语句, 之后 的 I 是 一个 变量, 然后 in 表示 这个 变量 的 范围, 后面 是 一个 列表, 意思 就是 I 变量 要 在 这个 列表 的 范围 内,
第二行, do 开始 执行 循环体 的 意思,
第三行, done 表示 循环 结束
ok, 下面 说 一下 怎样 生成 列表 把, 这样 手动 写 列表 也是 很不爽 的 哈。
----------------------------------------------------
生成列表:
1 、 {1..9} 花括号 生成, 这个 表示 生成 列表 1 到 9,继续改一下上个脚本把。
这样 看 上去 是不是 简单 多 了 啊。
2、 使用 关键字 seq 生成 列表, 语法 格式 为 seq 1 [步长] 9, 这里 也是 生成 1 到 9 , 中间 那个 步长 是 可以 省略 的, 步长 的 意思 是 每一步 的 长度,
如 seq 1 2 9 表示 1 3 5 7 9, 每次 都是 上一次 生成 的 数字 加上 步长
seq 还有 几个 选项, 不过 不太常用。。
-s ‘字符‘, 这个 是 设定 分隔符, 默认 为 ‘\n‘ 的, 大概 能 用得着 的 就是 这个 了
这里 注意, 要 用 单个 字符 哦, 用 字符串 会 出现 另外 一种 情况 的,
-f 这个 才是 可以 匹配 字符串 的 选项, 如图:
这个 第三个 语句 也 可以 执行, 但 他 是 以 字符串 来 分隔 数字 的, 可能 不是 我们 要 表达 的 意思 把。 seq 用法 还有 一些, 这里 就 不多说 了, 。。
3、 说一下 列表 除了 手写 之外, ls 之类 的 命令 也是 可以 生成 列表 的,不用 要用 `` 把 命令 引起来, 这个 都懂 把, 前面 有 说过 的。
-----------------------------------------------
写 一个 小 脚本 把, 都 说 这么 多 了, ..
添加100个用户, user1 到 user 100, 将 用户 的 密码 设置 为 111111
就 是 这个 了, passwd 命令 这个 都 没忘记 把, 反正 我 是 没有, 其实 马哥 领着 我们 练习 了好多 习题 的, 不过 这里 我 就 说了 几个, 练习 还是 少 啊, 多练 多敲 才是 王道, 没有 任何 捷径 的。。。。
本文出自 “宁静淡泊” 博客,请务必保留此出处http://vrgfff.blog.51cto.com/6682480/1572455
标签:bash脚本
原文地址:http://vrgfff.blog.51cto.com/6682480/1572455