shell脚本编程学习笔记1——shell基础与Bash基本功能
1,简介:
1,Shell就是一个命令行解释器,用以连接输入设别和内核。 2,Shell是解 释执行的脚本语言,在Shell中可以直接调 用Linux系统命令。 3,shell种类比较多,总分为bshell和cshell。比较常用的是bshell中的Bash,本博客学习的也是linux中的Bash 4,查看linux支持那种shell,可查阅文件/etc/shells
2,执行方式
echo [options] [contents] -e: 支持反斜线控制的字符转换 实例: [root@localhost ~]# echo -e "ab\bc" [root@localhost ~]# echo -e "a\tb\tc\nd\te\tf" 注:常见反斜线控制的字符串: \\ 输出\本身 \a 输出警告音 \b 退格键,也就是向左删除键 \c 取消输出行末的换行符。和“-n”选项一致 \e ESCAPE键 \f 换页符 \n 换行符 \r 回车键 \t 制表符,也就是Tab键 \v 垂直制表符 \0nnn 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进 制数 \xhh 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数 hello word 脚本 写脚本 [root@localhost sh]# vi hello.sh #!/bin/Bash echo 'hello word'; 脚本执行 1,赋予执行权限,然后绝对或者相对路径 chmod 755 hello.sh ./hello.sh 2,Bash调用执行脚本 bash 注意:windows回车符和linux不一致,编辑的shell需要转换 使用:dos2unix即可 win: ^M$ linux: $
3,Bash基本功能
1,历史命令 [root@localhost ~]# history [选项] [历史命令保存文件] 选项: -c: 清空历史命令 -w: 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history 注意:.bash_history默认保存1000条,可在/etc/profile修改 使用上、下箭头调用以前的历史命令 使用“!n”重复执行第n条历史命令 使用“!!”重复执行上一条命令 使用“!字串”重复执行最后一条以该字 串开头的命令 2,tab键补全 3,别名 [root@localhost ~]# alias 别名='原命令' 设定命令别名 [root@localhost ~]# alias 查询命令别名 注意:别名优先级 1 第一顺位执行用绝对路径或相对路径执行 的命令。 2 第二顺位执行别名。 3 第三顺位执行Bash的内部命令。 4 第四顺位执行按照$PATH环境变量定义的 目录查找顺序找到的第一个命令。 别名永久生效需要修改配置文件: /root/.bashrc 删除别名:unalias 别名 4快捷键 ctrl+A 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移 动到命令行开头时使用。 ctrl+E 把光标移动到命令行结尾。 ctrl+C 强制终止当前的命令。 ctrl+L 清屏,相当于clear命令。 ctrl+U 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退 格键一个一个字符的删除,使用这个快捷键会更加方便 ctrl+K 删除或剪切光标之后的内容。 ctrl+Y 粘贴ctrl+U或ctrl+K剪切的内容。 ctrl+R 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入 搜索内容,就会从历史命令中搜索。 ctrl+D 退出当前终端。 ctrl+Z 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管 理章节详细介绍。 ctrl+S 暂停屏幕输出。 ctrl+Q 恢复屏幕输出。 5,输出重定向(主要用于日志系统) 键盘 /dev/stdin 0 标准输入 显示器 /dev/sdtout 1 标准输出 显示器 /dev/sdterr 2 标准错误输 输出重定向: 标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。 命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。 标准错误输出重定 向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。 错误命令 2>>文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 正确输出错误输出同时保存 命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 6,输入重定向 [root@localhost ~]# wc [选项] [文件名] 选项: -c 统计字节数 -w 统计单词数 -l 统计行数 命令<文件 把文件作为命令的输入 命令<< 标识符 … 标识符 把标识符之间内容作为 命令的输入 7,多命令顺序执行 ; 命令1 ;命令2 多个命令顺序执行,命令之间没有任何逻辑联 系 && 命令1 && 命令2 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 || 命令1 || 命令2 逻辑或 当命令1 执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 实例:[root@localhost ~]# ls ; date ; cd /user ; pwd dd命令(复制磁盘或者源) [root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数 选项: if=输入文件 指定源文件或源设备 of=输出文件 指定目标文件或目标设备 bs=字节数 指定一次输入/输出多少字节,即把这些字节看做 一个数据块 count=个数 指定输入/输出多少个数据块 实例: [root@localhost ~]# date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date [root@localhost ~]# 命令 && echo yes || echo no 8,管道符 [root@localhost ~]# 命令1 | 命令2 令 1 的正确输出作为命令 2 的操作对象 实例: [root@localhost ~]# ll -a /etc/ | more [root@localhost ~]# netstat -an | grep "ESTABLISHED" 复习:grep [root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i: 忽略大小写 -n: 输出行号 -v: 反向查找 --color=auto 搜索出的关键字用颜色显 9,通配符 ? 匹配一个任意字符 * 匹配0个或任意多个任意字符,也就是可以匹配任何内容 [] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配 一个字符,或者是a,或者是b,或者是c。 [-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z] 代表匹配一个小写字母。 [^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^09]代表匹配一个不是数字的字符。 实例: [root@localhost ~]# cd /tmp/ [root@localhost tmp]# rm -rf * [root@localhost tmp]# touch abc [root@localhost tmp]# touch abcd [root@localhost tmp]# touch 012 [root@localhost tmp]# touch 0abc [root@localhost tmp]# ls ?abc [root@localhost tmp]# ls [0-9]* [root@localhost tmp]# ls [^0-9]* 10,Bash中其他特殊符号: '' 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都 没有特殊含义。 "" 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`” 和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义 符”的特殊含义。 `` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。 和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 $() 和反引号作用一样,用来引用系统命令。 # 在Shell脚本中,#开头的行代表注释。 $ 用于调用变量的值,如需要调用变量name的值时,需要用$name 的方式得到变量的值。 \ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 如\$将输出“$”符号,而不当做是变量引用。 实例: [root@localhost ~]# echo `ls` [root@localhost ~]# echo $(date) [root@localhost ~]# name=sc [root@localhost ~]# echo '$name' [root@localhost ~]# echo "$name" [root@localhost ~]# echo ‘$(date)' [root@localhost ~]# echo “$(date)"