*shell
查看可以使用哪种shell语言
vi /etc/shells
echo 可以实现复杂的输出格式控制展示在控制台
控制字符 | 作用 |
---|---|
\a | 输出警告音 |
\b | 退格键,就是向左删除键 |
\n | 换行 |
\r | 回车 |
\t | 制表符,就是Tab键 |
\v | 垂直制表符 |
\Onnn | 按照ASCII码输出,0为数字,nnn是三位八进制数 |
\xhh | 按照16进制输出 |
示例:
echo "$name It is a test" 输出OK It is a test
echo `date` 输出Thu Jul 24 10:08:46 CST 2014
echo '$name\"' 输出$name\"
echo -e "\e[1;31m 中文输出字体变色 \e[0m"
echo -e "\e[1;33m 中文输出字体变色 \e[0m" 33代表一种颜色
注释使用# 但#!/bin/bash是固定语法
执行脚本
chmod 777 shell.sh
./shell.sh
bash shell.sh #通过bash调用脚本
## alias 设置指令的别名
语 法:alias 别名= '指令名称' (**只对当前有效,重启之后就无效了**)
alias egrep='egrep --color=auto'
alias vi = 'vim'
alias 查看系统中所有的命令别名
unalias vi #删除别名
vi ~/.bashrc #写入环境配件,永久生效
## 常用快捷键
Ctrl+L 清屏
Ctrl+A 光标移动到命令行首
Ctrl+E 光标移动到命令行尾
Ctrl+U 从光标所在位置删除到行首
Ctrl+Z 把命令放入后台
Ctrl+R 在历史命令中搜索
History 查看历史命令
-c 清除历史命令
-w 将历史命令保存到.bash_history文件中
ls -alh 进入文件目录
!字串 重复执行最后一条以该字串开头的命令
!! 重复执行上一条命令
!n 重复执行第n条历史命令
## 输出从定向
类型 | 符号 | 作用 |
---|---|---|
正确输出重定向 | > | 覆盖的方式,把正确的信息输出到指定文件 |
>> | 追加的方式 | |
错误输出重定向 | 2> | 覆盖的方式 ,错误的信息 |
2>> | 追加的方式,,错误的信息 | |
正确错误同时 | 2>&1 | 命令>文件名2>&1 同理 &> |
命令>>文件名2>&1 同理 &>> | ||
命令>>文件1 2>>文件2 | 正确的放到文件1错误的放到文件2 |
注意:大于号左右不能有空格
ifconfig >> test.log #把查到的记录放到test.log文件
cat test.log
ifconfig &>>test.log
ls &>/dev/null #命令的结果不展示
多命令顺序执行
; | 命令1;命令2 | 多个命令顺序执行 |
&& | 命令1&&命令2 | 命令1执行正确命令2才会执行 |
|| | 命令1||命令2 | 命令1执行错误命令2才会执行 |
| | 命令1 | 命令2 | 命令1的正确输出作为命令2的操作对象 |
date; tar -zcvf etc.tar.gz /etc; date
ls && pwd
ls && echo yes || echo no
ls -l /etc | more
netstat -an | grep ESTABLISHED | wc -l #统计连接人数1
通配符
ls et* #列出所有带et的文件
ls et? #?只匹配et后面一个字符的文件
ls et[0-9] #匹配et后面带0到9的数字一位数
ls et[0-9][0-9] #匹配et后面带0到9的数字两位数
ls et[^0-9] #除数字以外的
正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配. grep awk sed等命令可以支持正则表达式.
gerp "name" log.logl #列出log文件中带有name的名字的整行
通配符用来匹配符合条件的文件名,通配符是完全匹配,ls find cp这些命令不支持正则表达式,所有只有使用shell自己的通配符来进行匹配了
find . -name "aa*" #寻找带有aa文件名的文件
基础正则表达式
vim .bashrc #设置别名文件
alias grep ='grep --color=auto' #匹配到的字符高亮展示
source .bashrc #加载修改后的设置,使之生效
元字符 | 作用 |
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符外任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 匹配中括号中任意一个字符 |
[~] | 匹配除中括号的字符意外的任意字符 |
\ | 转义符 |
\{n\} | 表示其前面的字符恰好出现n次 |
"a" 匹配所有内容,包括空白行
"aa*" 匹配至少包含有一个a的行
"aaa*" 匹配最少包含两个连续a的字符串
"aaaaa*" 匹配最少包含四个连续a的字符串
a..d 会匹配在a和d这两个字母之间有两个字符的字符串
a.*d 匹配在a和d之间任意字符
.* 匹配所有内容
grep "[ad]" test.txt #包含ad这两个字符的
grep "[0-9]" test.txt #包含所有数字的
grep "^[0-9]" test.txt #首行是数字的
grep "[0-9]$" test.txt #尾行是数字
grep "^[^a-z]" test.txt #取不是字符的
grep "^[^0-9]" test.txt #取不是数字的
^[^a-z] #匹配不用小写字符开头的行 [^]内的是取反
[]中括号外的^是取反
#!/bin/bash
#提示“请输入名字”并等待30秒,把用户的输入保存到变量name中
read -t 30 -p “Please input your name:” name
echo "name is $name"
#-s:隐藏输入的数据,适用于机密信息的输入
read -s -t 30 -p “Please enter your password:” password
#执行函数
readFileFun
function readFileFun() {
#如果gitProject.txt文件不存在
if [ ! -f gitProject.txt ];then
echo " gitProject.txt is not exist, Please set project file "
return 0;
fi
cat gitProject.txt | while read line
}
条件表达式
文件表达式
if [-f file] #如果文件存在
if [-d ...] #如果目录存在
if [-s file] #如果文件存在且非空
if [-r file] #如果文件存在且可读
if [-w file] #如果文件存在且可写
if [-x file] #如果文件存在且可执行
整数变量表达式
if [int1 -eq int2] #如果int1等于int2
if [int1 -ne int2] #如果不等于
if [int1 -ge int2] #如果>=
if [int1 -gt int2] #如果>
if [int1 -le int2] #如果<=
if [int1 -lt int2] #如果<
字符串变量表达式
if [$a = $b] #如果等于,字符串允许使用赋值号做等号
if [-n $a] #如果a非空(非0),返回0(true)
if [-z $a] #如果a为空
示例:
echo "$name It is a test" 输出OK It is a test echo `date` 输出Thu Jul 24 10:08:46 CST 2014 echo '$name\"' 输出$name\" echo -e "\e[1;31m 中文输出字体变色 \e[0m" echo -e "\e[1;33m 中文输出字体变色 \e[0m" 33代表一种颜色
注释使用# 但#!/bin/bash是固定语法
执行脚本
chmod 777 shell.sh ./shell.sh bash shell.sh #通过bash调用脚本
alias 设置指令的别名
语 法:alias 别名= '指令名称' (只对当前有效,重启之后就无效了)
alias egrep='egrep --color=auto' alias vi = 'vim' alias 查看系统中所有的命令别名 unalias vi #删除别名
vi ~/.bashrc #写入环境配件,永久生效
常用快捷键
Ctrl+L 清屏
Ctrl+A 光标移动到命令行首
Ctrl+E 光标移动到命令行尾
Ctrl+U 从光标所在位置删除到行首
Ctrl+Z 把命令放入后台
Ctrl+R 在历史命令中搜索
History 查看历史命令 -c 清除历史命令 -w 将历史命令保存到.bash_history文件中 ls -alh 进入文件目录 !字串 重复执行最后一条以该字串开头的命令 !! 重复执行上一条命令 !n 重复执行第n条历史命令
输出从定向
类型 | 符号 | 作用 |
---|---|---|
正确输出重定向 | > | 覆盖的方式,把正确的信息输出到指定文件 |
>> | 追加的方式 | |
错误输出重定向 | 2> | 覆盖的方式 ,错误的信息 |
2>> | 追加的方式,,错误的信息 | |
正确错误同时 | 2>&1 | 命令>文件名2>&1 同理 &> |
命令>>文件名2>&1 同理 &>> | ||
命令>>文件1 2>>文件2 | 正确的放到文件1错误的放到文件2 | |
注意:大于号左右不能有空格
ifconfig >> test.log #把查到的记录放到test.log文件 cat test.log ifconfig &>>test.log ls &>/dev/null #命令的结果不展示
多命令顺序执行
; | 命令1;命令2 | 多个命令顺序执行 |
---|---|---|
&& | 命令1&&命令2 | 命令1执行正确命令2才会执行 |
|| | 命令1||命令2 | 命令1执行错误命令2才会执行 |
| | 命令1 | 命令2 | 命令1的正确输出作为命令2的操作对象 |
date; tar -zcvf etc.tar.gz /etc; date ls && pwd ls && echo yes || echo no ls -l /etc | more netstat -an | grep ESTABLISHED | wc -l #统计连接人数1
通配符
ls et* #列出所有带et的文件 ls et? #?只匹配et后面一个字符的文件 ls et[0-9] #匹配et后面带0到9的数字一位数 ls et[0-9][0-9] #匹配et后面带0到9的数字两位数 ls et[^0-9] #除数字以外的