博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux - SHELL基础
阅读量:4188 次
发布时间:2019-05-26

本文共 4039 字,大约阅读时间需要 13 分钟。

文章目录

shell基础

输出命令 - echo

语法

echo [选项] [输出内容]

选项:

-e: 支持转义字符

转义字符
控制字符 作 用
\ 输出\本身
\a 输出警告音
\b 退格键,也就是向左删除键
\c 取消输出行末的换行符。和“-n”选项一致
\e ESCAPE键 \f 换页符
\n 换行符
\r 回车键
\t 制表符,也就是Tab键 \v 垂直制表符
\0nnn 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

范例

# \b退格符(base) [root@localhost sbin]#  echo -e "ab\bc"ac(base) [root@localhost sbin]# echo -e "a\tb\tc\nd\te\tf"a	b	cd	e	f

使用技巧

1. 带颜色输出

代码 颜色
30m 黑色
31m 红色
32m 绿色
33m 黄色
34m 蓝色
35m 洋红
36m 青色
37m 白色

(base) [root@localhost sbin]# echo -e "\e[1;31m abcd \e[0m"

abcd

接收键盘输入命令 - read

语法

read [选项] [变量名]

选项介绍

  • -p “提示信息” : 在等待read输入时,输出提示信息
  • -t 秒数: read命令会等待用户输入,使用此选项可以指定等待时间
  • -n 字符数: read命令只接受指定的字符数,到达指定字符数,自动执行。
  • -s :隐藏输入的数据,适用于机密信息的输入

范例

#!/bin/bashread -t 30 -p "Please input your name: " name#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中echo "Name is $name "read -s -t 30 -p "Please enter your age: " age#年龄是隐私,所以我们用“-s”选项隐藏输入echo -e "\n"echo "Age is $age "read -n 1 -t 30 -p "Please select your gender[M/F]: " gender#使用“-n 1”选项只接收一个输入字符就会执行(都不用输入回车)echo -e "\n"echo "Sex is $gender"

第一个脚本

[root@localhost sh]# vi hello.sh#!/bin/Bash#The first program# Author: lhx (E-mail: luhongxuan@uinnova.com)echo -e "hello shell"

脚本执行方式

方式一:赋予执行权限,直接运行(推荐)

chmod 755 hello.sh  /hello.sh

方式二:通过Bash调用执行脚本(不需要执行权限)

bash hello.sh

使用技巧

由于Windows与Linux的换行符不一样,在windows下编辑的shell脚本,直接拷贝过来无法执行,我们应该如何转换呢?

答:使用doc2unix命令即可,需要yum提前安装。

  • doc2unix命令: windows编辑shell转化为Linuxshell。
  • unix2doc命令: Linuxshell脚本 转化为windows下shell脚本。

cat加-A命令可以看到文件中的隐藏符号:

cat -A '/etc/xxx.conf'

  • linux 换行:$
  • windows 换行:^M$

历史命令以及命令补全

历史命令

语法

history [选项][历史命令保存文件]

选项
  • -c : 清空历史命令(黑客入侵,可能会做此操作)
  • -w : 把缓存的历史命令写入历史命令报错文件~/.bash_history

历史命令调用

  • 使用上,下箭头调用(常用)
  • 使用"!n"重复执行第n条历史命令
  • 使用"!!"重复执行上一条命令
  • 使用"!子串"重复执行最后一条以该子串开头的命令

命令补全:tab

命令别名与常用快捷键

临时设置别名:alias

  • 临时设置别名:alias 别名=‘元命令’
  • 查询命令别名:alias

永久别名

(base) [root@localhost sbin]# vim /root/.bashrc # .bashrc# User specific aliases and functionsalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'

删除别名

unalias 别名

命令执行顺序

  1. 命令绝对路径或相对路劲
  2. 别名
  3. Bash内部命令
  4. $PATH环境变量定义的命令

Bash常用快捷键

快捷键 作 用
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 恢复屏幕输出

输入输出重定向

标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

输出重定向 >> >

将标准输出改为输出到文件

类 型 符 号 作用
标准输出重定向 命令 > 文件 覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。
命令 >> 文件 追加的方式,把命令的正确输出输出到指定的文件或设备当中。
标准错误输出重定向 错误命令 2> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中。
同时保存正确与错误输出 命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中(建议使用)
同时保存正确与错误输出 命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中。

输入重定向 << <

其他方式取代键盘输入

使用方法 作用
命令<文件 把文件作为命令的输入
命令<< 标识符 … 标识符 把标识符之间内容作为命令的输入

举例

wc < /etc/supervisorctl.conf

多命令顺序执行 ; && ||

多命令执行符 格式 作 用
命令1 ;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 逻辑与,当命令1正确执行,则命令2才会执行当命令1执行不正确,则命令2不会执行
|| 命令1 || 命令2 逻辑或,当命令1 执行不正确,则命令2才会执行当命令1正确执行,则命令2不会执行

范例

mkdir test; cd test

使用技巧

shell中判断命令是否正确:命令 && echo yes || echo no

管道符 |

语法

命令1 | 命令2 :命令1的正确输出作为命令2的操作对象

范例

ps -ef|grep uwsgi

通配符

通配符 作 用
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
[-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0- 9]代表匹配一个不是数字的字符。

范例

[root@localhost tmp]# ls ?abc[root@localhost tmp]# ls [0-9]*[root@localhost tmp]# mkdir test[0-3]

shell中的特殊符号

符 号 作 用
‘’ 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义
“” 双引号。在双引号中特殊符号都没有特殊含义,但是"$"、"`“和”\"是例外*拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。**和 ( ) 作 用 一 样 ∗ ∗ , 不 过 推 荐 使 用 ()作用一样**,不过推荐使用 ()使(),因为反引号非常容易看错。
$() 和反引号作用一样,用来引用系统命令
# 在Shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 如$将输出“$”符号,而不当做是变量引用。

转载地址:http://kwsoi.baihongyu.com/

你可能感兴趣的文章
如何知道可执行文件是32-bit还是64-bit
查看>>
.NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
查看>>
Microsoft Silverlight正式发布
查看>>
国际化编程中Locale相关概念的一些解释
查看>>
PIA (Primary Interop Assembly) & AIA (Alternate Interop Assembly)简介
查看>>
“妖精”团队———阿里巴巴
查看>>
迟到的感谢——2006最有价值博客的候选人(& 个人回顾)
查看>>
第29回 软件质量度量
查看>>
IT 2007预言
查看>>
怎样让.Net2.0的Membership使用已存在的Sql Server2000/2005数据库
查看>>
ASP.NET2.0 文本编辑器FCKeditor使用方法详解
查看>>
常见的 Web 项目转换问题及解决方案
查看>>
VS2005中使用ClickOnce 部署应用程序的升级
查看>>
Visual Studio2005下配置及运行NUnit
查看>>
.Net Remoting配置文件的用法
查看>>
Tomcat性能调整优化
查看>>
利用SQL Server 2005减轻生产服务器优化负荷
查看>>
优化MYSQL服务器
查看>>
Exchange磁盘性能优化
查看>>
Apusic应用服务器的性能调节_JVM优化
查看>>