bash shell
来源:互联网 发布:千里马计划软件下载 编辑:程序博客网 时间:2024/05/16 11:24
bash
shell种类: sh
, dash
, bash
ksh
, zsh
, csh
, tcsh
等 echo $SHELL
查看当前shell cat /etc/shells
查看系统支持的shell
最常用, Linux预设shell为bash
.
变量
字母, 数字, 下划线组成, 不允许数字开头.
定义: VAR=value
使用: $VAR
$0
(脚本名), $1-$9
(脚本参数) 内建变量 有特殊含义的变量, 如$#
, $?
等相关命令
- env 列出所有环境变量
- set 列出所有环境变量以及自定义变量(当前bash有效)
- locale 显示当前语言和编码
- -a 显示所有系统支持的语言和编码
- unset VAR 删除变量VAR
- export 显示所有环境变量的定义
export VAR 将自定义变量VAR升级为环境变量
数组变量
${arr[i]}
数组中下标为i
的变量, 等同于c语言中的arr[i]
. ${arr[*]}
所有数组元素 ${#arr[*]}
数组元素个数
内建变量
$?
上一条命令的返回值 $#
命令行或位置参数个数 $$
当前执行进程的ID $!
最后执行的后台命令的进程ID $-
shell当前选项, 与set命令功能相同. $*
命令行参数用字符串连接起来, 用空格分隔. $@
命令行参数各个独立表示的数组.
条件测试
0为真, 1为假.
条件测试的两种结构为[ EXP ]
和test EXP
数值测试
必须使用eq
, gt
, lt
, ge
, le
, ne
对应于c语言中的==
, >
, <
, >=
, <=
, !=
字符串测试
-n STR
字符串是否不为空 -z STR
字符串是否为空 STR1 == STR2
判断字符串是否相等 STR1 != STR2
判断字符串是否不相等
字符串比较建议字符串变量使用双引号, 即使变量为空.
文件测试
-e FILE
测试文件是否存在 -f FILE
测试文件是否为普通文件 -d FILE
测试文件是否为目录 -L FILE
测试文件是否为软链接文件 -b FILE
测试文件是否为块设备文件 -c FILE
测试文件是否为字符设备文件 -p FILE
测试文件是否为管道文件 -S FILE
测试文件是否为SOCKET
文件 -s FILE
测试文件长度是否不为0 -r FILE
测试文件是否为进程可读文件 -w FILE
测试文件是否为进程可写文件 -x FILE
测试文件是否为可执行文件
输入输出
- read VAR… 输入内容赋值给变量
- -p MSG 输出提示信息
- -n 对输入字符数进行限制
- -s 隐藏输入字符(常用于密码)
- -t N 设置超时时间(秒)
- echo STR 输出字符串STR并换行
- -n 不换行
- -e 启用转义字符
- printf STR 类似C语言的格式输出STR
其他
脚本中打开和关闭跟踪执行功能 set -x
打开跟踪执行功能 set +x
关闭跟踪执行功能
执行命令选项 bash -x FILE.sh
进入跟踪模式, 显示执行的每一条命令. bash -n FILE.sh
检查shell脚本是否存在语法错误, 不执行脚本. bash -c STR
从字符串中执行shell命令.
实例
简单算法
冒泡排序
bash code
bubble_sort() { arr=$1 len=$2 for((i=0;i<len-1;i++)); do for((j=0;j<len-i-1;j++)); do if [ ${arr[j]} -gt ${arr[j+1]} ]; then tmp=${arr[j]} arr[j]=${arr[j+1]} arr[j+1]=$tmp fi done done}arr=(3 1 2 5 4)len=${#arr[*]}bubble_sort $arr $lenecho ${arr[*]}
提取字符串
提取路径中的目录路径, 文件名, 扩展名.
利用算术展开 echo ${path%/*}
目录路径 echo ${path##*/}
文件名 echo ${path##*.}
扩展名
利用命令展开
echo `basename $path` 目录路径echo `dirname $path` 文件名
文件搜索
递归寻找当前目录下~
为后缀的文件并删除
直接使用find命令 find . -name "*~" -exec rm {} \;
使用for循环shell脚本
bash code
files=`find . -name "*~"`for file in $files; do rm $filedone
文本处理
去除各类空白(TAB和空格) grep -v "^$" text.txt
去除空白行 sed 's/^[ \t]*//g' text.txt
去除行首空白 sed 's/[ \t]*$//g' text.txt
去除行尾空白
去除windows系统文本文件行尾多余的回车换行符
windows行尾使用\r\n
, linux行尾使用\n
. ^M
是linux回车换行符写法(输入方法是按住CTRL+v
,松开v
,按m
) sed -i 's/^M//g' text.txt
转换编码使用iconv
命令 iconv -c -f GB2312 -t UTF-8 old.txt > new.txt
网络处理
获取当前网卡eth0的IP地址(已知C类网络)并扫描局域网可ping通主机
bash code
ipaddr=`ifconfig | grep -A1 "eth0" | sed '1d' | awk '{print $2}' | awk -F: '{print $2}'`network=${ipaddr%.*}for num in {1..255}; do ip=$network.$num ping -c 1 -w 1 $ip &> /dev/null [ $? -eq 0 ] && echo $ipdone
使用arp -a
查看局域网主机IP地址与MAC地址映射
- bash shell(bash) 快捷键
- bash shell(bash) 快捷键
- bash shell
- bash shell
- Shell(Bash)
- bash shell
- BASH SHELL
- shell bash
- bash shell
- bash shell
- Bash Shell
- Bash Shell
- bash shell
- BASH SHELL
- bash shell
- bash shell
- Bash-shell
- bash shell
- Linux内核之rbtree(红黑树)
- 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
- 集群启动快速指南
- blocked Queue
- Eclipse在连接hadoop时Unsupported major.minor version 51.0问题解决
- bash shell
- 音频条形图,顶部带小矩形
- ?不是很理解的分治法Majority Element
- mysql主从配置
- 获取总内存?
- [数据结构]第八章-字典
- 计算机运算中对小数的处理
- hadoop或者spark 增加节点
- 笔试题86. LeetCode OJ (72)