1 认识bash这个shell
用户通过shell来跟kernel进行沟通,但是系统有很多工具提供了shell的功能,其中bash就是其中之一。
bash shell的功能:
-命令编修能力 history
- tab,具有文件名补全,命令补全的功能。
- 双击tab,有提示的作用。
- 命令别名功能:alias
- 程序化脚本
- 万用字符 *
内置命令:
查询是否为内置命令:type command
如:type cd
[ctrl]+u/[ctrl]+k | 向前向后删除 |
---|---|
[ctrl]+a/[ctrl]+e | 光标移动到最前或最后 |
2 shell变量功能
-
变量取用和设置
echo $var
echo $PATH -
子模块
cd /lib/modules/uname -r
/kernel
cd /lib/modules/$(uname -r)/kernelmyname="$var is a var" 可进行变量替换
myname=’$var is a var’
-
环境变量
[root@localhost~]$ env
[root@localhost~] $ set 观察所有变量 -
特殊符号
$ 表示本shell的ID
? 上条命令执行的回传值,为0则表示执行成功
echo $$ 本shell的PID
echo $?
export var :将自定义变量转成 环境变量 -
read , array, declare
- read
$read -p "Please keyin your name: " -t 30 named - declare 的用法
sum=1+2+3
echo $sum
declare -i sum=1+2+3
echo $sum
- array
var[1]='zhang'
var[2]='li'
var[3]='wang'
echo "${var[1]},${var[2]},${var[3]}"
- 与文件系统及程序的限制关系:ulimit
使用示例:
$ ulimit -f 10240
$ dd if=/dev/zero of=123 bs=1M count=20 //创建20M的文件失败
rm 123
登出再次登录,就能取消掉限制
- 变量替换,取代与删除
p a t h = path= path={PATH}
$ echo ${path}
- # 号的使用
$ echo ${path#/local/bin:} //向右删除头一个
$ echo ${path##/:} //删除最长的那一个 - %号的使用
表示从后往前删除
%% 表示最长的匹配串 - /
${变量/旧字串/新字串} 第一个被取代
${变量//旧字串/新字串} 全部被取代
3 别名与历史命令
- alias, unalias
alias h=‘history’ - history
history n //最近N个
!cmd 最近匹配到的命令
!! 执行上一指令
4 bash shell的操作环境
- bash的进站信息:/etc/issue, /etc/motd
进站的画面,在文件/etc/issue中修改。
如:
\S (terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!
登录后获得通知消息,在/etc/motd中修改。
如告诉登录着固定时间会进行维护,或者某文件不能删除修改等。
5 数据流重定向
file <<,< command 输入,代号0
command >>,>file 输出,代号1
command 2>,2>> file/screen/device 标准错误输出 代号,2
/dev/null 垃圾桶黑洞设备与特殊写法
--------------------------
示例:
1. 输出
ls / >> file
2. 输入
cat << EOF > output
hello
world
EOF
3. 错误信息的丢弃
sh start.sh 2>/dev/null
2表示错误信息的标号,/dev/null是一个黑洞。
4. 将错误信息也保存到标准输出流中:2>&1
5. ;, &&, ||
连续指令, ;
指令回传值,$?
cmd1 && cmd2: cmd1 正确执行完毕,再运行cmd2 ,否则cmd2不执行
cmd1 || cmd2 : cmd1 正确执行完毕,cmd2不执行,
如: ls /tmp/abc || mkdir /tmp/abc ,不会出现mkdir重复的错误。
ls /tmp/vbirding && echo "exist" || echo "not exist" 存在输出exist,不存在输出not exist
6 管道命令pipe
如: ls /usr/bin | less 使用less协助查看
- cut ,grep
- cut
cut -d’:’ -f 3[,5]
cut -c-10 - grep 为分析一些信息
cat file |grep name
grep ‘name’ file
grep常用参数: -v,-i ,-E
- 排序命令:sort,wc,uniq
-
sort
cat file | sort
cat file | sort -t ‘:’ -k 3 #以:号分割,根据第三列字段排序 -
uniq
将重复的数据,仅仅列出一个 -
wc
wc -l 列出多少行
- 双向重导向
可以将内容打印到屏幕且将内容输入到文件。
ls | tee file - 字符转换命令
- tr: 删除一段信息当中的文字或者替换
如:cat file| tr ‘[a-z]’ ‘[A-Z]’ 小写换大写
tr -d ‘:’ 删除符号 - join
处理两个文件中,有相同数据的行,连成一行
如:join -t ':' /etc/passwd /etc/shadow -t 表示按照: 分割子串,并且对比第一列
- paste
将两个文件中,相同的行直接粘贴到一起
- paste
- split 分区命令
文件太大无法复制,将大文件分区为小文件。
如:
split -b 300k /etc/services services //将/etc/services文件分为300k的小文件
cat setvice*>>servicesbak 使用重定向就可以恢复
spilt -l 10 file bak // 按行划分,文件的每十行一个文件
-
xargs
command1 | xargs command2
将1的结果作为参数传递给2进行执行 -
- 号的用途
请相信,每一个符号的存在都是极其重要以及有意义的。
使用如下:
tar -cvf - /home | tar -xvf - -C /tmp/homeback
相当于临时未命名变量一样,前面指令的输出,作为后面指令的输入。
好了,本章的内容基本完毕。谢谢阅读和支持