shell编程之bash
程序员文章站
2024-02-19 16:41:04
...
shell是一门脚本语言。通常脚本语言有以下特性:
不需要编译,由解释器解释执行。
弱类型语言
变量通常不需要事先声明
常见的解释型语言有:
bash
perl
python
ruby
....
bash的变量类型:
本地变量:
格式: set VAR_NAME=value #设置变量
unset VAR_NAME #销毁变量
${VAR_NAME} #引用变量
作用范围:
当前shell进程有效
局部变量:
格式: local VAR_NAME=value #设置变量
unset VAR_NAME #销毁变量
${VAR_NAME} #引用变量
作用范围:
在当前shell进程的局部范围内有效
环境变量:
格式: export VAR_NAME=value #设置变量
unset VAR_NAME #销毁变量
${VAR_NAME} #引用变量
作用范围:
当前shell及其子shell有效
位置变量: $1,$2,.......
特殊变量: $$,$?,$#,[email protected]
bash脚本独立执行的条件:
1,要有执行权限
2,定义好shebang,即脚本的第一行。也就是指定脚本的解释器。例如:
#!/bin/bash
bash的配置文件:
Profile类:
作用:声明环境变量 执行程序或脚本
文件:/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
bashrc类:
作用:定义本地变量 定义命令别名
文件:/etc/bashrc
~/.bashrc
bash脚本调试的常用指令:
检查脚本的语法错误,不执行脚本:
bash -n /path/to/script_file.sh
调试执行脚本:
bash -x /path/to/script_file.sh
bash变量命名规范:
只能包含字母,数字和下划线
不能以数字开头
不能超过20个字符
严格区分大小写
要做到见名知义
命名规范,风格统一
shell是一门脚本语言,同时也是一门面向过程的语言。面向过程语言的语言控制结构一般有以下三种:
顺序结构:
默认法则,从上往下逐条执行
选择结构:
增加了条件判断,只执行条件满足的分支语句块
循环结构:
将同一代码块反复执行n次;
循环必须要有退出条件,否则,就成为死循环
bash的常用特性:
变量
快捷键
命令别名
命令行展开
管道
输入输出重定向
编程
命令行补齐
路径补齐
bash的常用快捷键:
编辑命令类:
Ctrl+a: 移至命令行首
Ctrl+e: 移至命令行尾
Ctrl+f: 按字符向右移动
Ctrl+b: 按字符向左移动
Alt+f: 按单词向右移动
Alt+b: 按单词向左移动
Ctrl+xx: 在命令行首和当前光标之间移动
Ctrl+u: 从当前光标处删除至命令行首
Ctrl+k: 从当前光标处删除至命令行尾
Ctrl+w: 从当前光标处删除至字首
Alt+d: 从当前光标处删除至字尾
Ctrl+d: 删除当前光标处的字符
Ctrl+h: 删除当前光标前的字符
Ctrl+y: 粘贴至当前光标后
Alt+c: 将当前光标所在的字符更改为大写字符
Alt+u: 从光标处至单词尾部全部更改为大写字符
Alt+l: 从光标处至单词尾部全部更改为小写字符
Ctrl+t: 交换光标处和之前的字符
Alt+t: 交换光标处和之前的单词
Alt+Backspace: 与Ctrl+w类似,分隔符有些差异
历史命令类:
Ctrl+r: 逆向搜索命令历史
Ctrl+g: 从历史命令搜索模式退出
Ctrl+p: 历史命令中的上一条命令
Ctrl+n: 历史命令中的下一条命令
Alt+.: 使用上一条命令的最后一个参数 等同于ESC+.
控制命令类:
Ctrl+l: 清屏 等同于clear
Ctrl+o: 执行当前命令,并重复上一条命令
Ctrl+s: 阻止屏幕输出
Ctrl+q: 允许屏幕输出
Ctrl+c: 终止命令
Ctrl+z: 挂起命令
Bang(!)命令:
!!: 执行上一条命令
!ba: 执行命令历史中最近以ba开头的命令
!ba:p : 仅打印输出,并不执行
!$: 上一条命令的最后一个参数,与Alt+.同
!$:p : 打印输出!$的内容
!*: 上一条命令的所有参数
!*:p 打印输出!*的内容
^var: 删除上一条命令中的var
^var^usr:将上一条命令中var替换为usr
^var^usr^:将上一条命令中所有的var替换成usr
注:Bash默认工作在emacs编辑模式下。
set -o vi 切换至vi模式
set -o emacs 切换至emacs模式
bash中的引号:
双引号:弱引用 可实现变量替换
单引号:强引用 不替换 而显示字符串本身
反引号:命令引用 也可以使用$() 例如:
echo "The time is `date +%T`"
echo "The time is $(date +%T)"
bash中的命令别名:
定义别名的好处:
简化命令 例如:
alias rm='rm -i'
保持使用习惯 例如:
alias cls='clear'
撤销别名:
unalias cls
别名的作用范围是当前shell
要想让别名永久有效,需要定义在配置文件中
如果不想使用别名,除了撤销别名之外,还可以使用\ 例如:
alias cat='cat -n'
cat /etc/rc.d/rc.sysinit
\cat /etc/rc.d/rc.sysinit #执行原来的cat命令 不带-n 参数
bash的重定向功能:
标准输入:默认是键盘
标准输出:默认是监视器
错误输出:默认是监视器
File discriptor,FD 文件描述符
标准输入fd: 0
标准输出fd: 1
标准错误输出fd:2
输出重定向:
> 覆盖重定向 目标存在则覆盖 目标不存在则新建
>> 追加重定向 目标存在则追加 目标不存在则新建
错误输出重定向:
2> 覆盖重定向
2>> 追加重定向
同时重定向标准输出和错误输出:
COMMAND > /path/to/stdout 2>/path/to/error
标准输出和错误输出到同一个文件:
&>
&>>
COMMAND &>/path/to/somewhere
COMMAND >/path/to/somewhere 2>&1
输入重定向:
<
COMMAND </from/somewhere
<<
wc << EOF
>test string 1
>test string 2
>test string 3
>test string 4
>EOF
#常用于生成用户选择列表
数据黑洞:/dev/null 吞噬所有数据 不会返回任何结果
ls /etc >/dev/null
bash的管道功能:
作用:将一个命令的输出发送至另一个命令的输入
rpm -qa | sort
#命令中可以使用数量不限的管道数(行长度最多是255字符)
rpm -qa | sort | more
rpm -qa | sort >rpm.list
转载于:https://blog.51cto.com/shjia/1422898
上一篇: jfreechart动态时序图