shell是什么?
shell是一个命令解释器,他为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。其实就是输入命令的那个交互界面
shell是一个强大的编程语言,易编写,易调试,灵活性强。shell是解释执行的脚本语言,shell中可以直接调用Linux系统的命令。
shell脚本的执行方式
echo输出命令
-> echo 'hello!'
hello!
-> echo "hello world!"
bash: !": event not found
-> echo 'hello world!'
hello world!
-> echo -e "ab\bcd" #-e可以识别转义字符
acd
-> echo -e "a\tb\tc\nd\te\tf"
a b c
d e f
#!/bin/ksh
#The first program
#Author L X
echo -e "Mr liu is the most honest man in SBell!"
-> chmod 777 hello.sh #赋予执行权限,直接运行
-> ./hello.sh
bash: ./hello.sh: /bin/Bash: bad interpreter: No such file or directory
-> vim hello.sh
-> ./hello.sh
Mr liu is the most honest man in SBell!
-> ksh hello.sh #通过ksh调用执行脚本
Mr liu is the most honest man in SBell!
echo [选项] [输出内容] /输出命令
-e 支持反斜线控制的字符转换;
控制字符
\a 输出警告音;
\b 退格键;
\n 换行符;
\r 回画键;
\t 制表符,也就是TAB键;
\v 垂直制表符;
\0nnn 按照八进制ASCII码表输出字符。
\xhh 按照十六进制ASCII码表输出字符。
echo -e "\e[1;31m 嫁人就要嫁凤姐 \e[0m"
30m=黑色,31m=红色,32m=绿色,33m=黄色
34m=蓝色,35m=洋红,36m=青色,37m=白色
赋予执行权限,直接运行
chomd 755 hello.sh
./hello.sh
bash hello.sh 可不赋予权限,直接运行;
取进程号
-> ps -aux|less #分页查看现在的进程
ps aux|grep vim #用grep命令来查找vim关键字
ps -aux|grep xiangl #查找xiangl的进程号
kill PID
后台
->firefox #这时敲ctrl+z 就可以暂停这个进程
->bg #相当于敲firefox & 把这个进程放到后台去执行
ctrl+c就把当前命令结束了
如果一个进程占用了大量内存,导致整个系统都被占用了,这时我们可以使用
linux是同时运行着7个工作台的,这时敲ctrl+alt+f1就可以到达第一个工作台。在这里可以输入命令来杀死这个进程
Bash 的基本功能:
别名与快捷键
alias #查看系统中已经生效的别名
alias ls='ls --color=auto' #auto添加颜色,never取消颜色
alias l='ls -l --color=auto'
vim ~/.bashrc #写入环境变量配置文件,就可以一直生效了。.bashrc文件每个用户的目录下都会有一个
source .bashrc #可以让新加的别名立刻生效
unalias 别名 #删除别名
把加在.bashrc中的别名也要删除
命令生效的顺序
1)执行绝对路径或相对路径的命令
2)执行别名
3)执行Bash的内部命令
4)执行按照$PATH 环境变量定义的目录查找顺序找到的第一个命令 echo $PATH查看
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到行首
ctrl+e 光标移动到行尾
ctrl+u 从光标所在位置删除到行首
ctrl+z 把命令放到后台
ctrl+r 在历史命令中搜索
历史命令
history -c/w 历史命令保存文件
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
在 vi /etc/profile 文件中修改HISTSIZE=1000来修改历史记录的保存条数
使用上下箭头也可以调用以前的历史命令
使用"!n"重复执行第n条命令
使用"!!"重复执行上一条命令
使用"!字串"重复执行最后一条以该字串开头的命令
命令和文件的补全:tab键
文件描述符
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准正确输出
显示器 /dev/stderr 2 标准错误输出
输出重定向
命令>文件 #以覆盖的方式,把命令的正确输出输出到指定文件或设备当中
命令>>文件 #以追加的方式,把命令把命令的正确输出输出到指定文件或设备当中
错误命令2>文件 #以覆盖的方式,把命令的输出输出到指定文件或设备当中
错误命令2>>文件 #以追加的方式,把命令把命令的输出输出到指定文件或设备当中
正确输出和错误输出同时保存:
命令>文件 2>&1 #以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令>文件 2>>&1 #以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令&>文件 #以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令&>>文件 #以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令>>文件1 2>>文件2 #把正确的输出追加到文件1中,把错误输出追加到文件2中。
hahah >>test1.log 2>>test2.log
#只要写错误输出>号与文件名之间不能有空格
ls &>/dev/null #linux的黑洞,相当于垃圾站
输入重定向:
命令<文件把文件作为命令的输入
命令<<标识符
...
标识符把标识符之间内容作为命令的输入
wc -c/w/l 文件名
-c统计字节数
-w统计单词数
-l统计行数
也可以写成 cat 文件名 #对文件的字数、单词数、行数做统计
多命令顺序执行:
; 命令1;命令2 #多个命令顺序执行,命令之间没有任何逻辑关系
&& 命令1&&命令2 #逻辑与 当命令1正确执行,命令2才会执行。命令1执行不正确,命令2不会执行
|| 命令1||命令2 #逻辑或 当命令1正确执行,命令2不会执行。命令1执行不正确,命令2才会执行
ls && echo yes || echo no #如果命令正确执行打印yes,错误执行就会输出no
管道符:|
netstat -an | grep ESTABLISHD #查看服务器处于连接状态的
netstat -an| grep CONNECTED |wc -l #数一下处于连接状态的有多少个?
shell中的特殊符号
通配符:
? #匹配一个任意字符
* #匹配0个或多个任意字符,也就是可以匹配任何内容
[] #匹配中括号中任意一个字符。[abc]表示匹配或者a或者b或者c中的任意一个
[-] #匹配括号中任意一个字符,[a-z]代表一个范围
[^] #逻辑非,表示匹配不上中括号内的一个字符 [^0-9]代表匹配一个不是数字的字符
[^0-9]*#代表匹配一个不是数字的字符的任意字符串
Bash中的其他符号
'' #单引号,在单引号中所有特殊符号,$和"" ``都没有特殊含义
"" #双引号。在双引号中特殊符号都没有特殊含义但 $ ` \除外
`` #反引号括起来的内容是系统命令,在Bash中它会先执行,和$()作用一样
$()#用来引用系统命令
# 代表注释
$ #用于调用变量的值,如果变量有name时,需要$name的方式得到变量的值。
\ #转义字符 \$符号将不当作变量的引用
-> a=123345
-> echo a
a
-> echo $a
123345
-> echo '$a'
$a
-> echo "$a"
123345
-> bb=$(ls) #将命令ls运行的结果赋值配变量bb
-> echo $bb #$是调用变量的值
bec_pss8sim cmatrix-1.2a code congdx.log hello.sh killsimlc log1 log2 m2 m2.tar.gz
-> da=$(date)
-> echo "$da"
n Sep 10 16:00:36 CST 2018
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)