【鸟哥Linux私房菜】学习Shell与Shellscript

1.认识bash这个Shell

  • 我们通过shell和内核进行沟通
  • 硬件需要通过内核来获取我们输入的指令
  • 我们可以使用的shell可以查看/etc/shells这个文件
[work(caibin)@tjtx145-85-31 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/rbash
  • 我们登陆取得的shell写到/etc/passwd文件中
  • 平时多可以使用别名设置功能
  • 一般情况下,type命令被用于判断另外一个命令是否是内置命令,比which要强大
[work(caibin)@tjtx145-85-31 ~]$ type kill
kill is a shell builtin

### alias 别名
### keyword 关键字,Shell保留字
### function 函数,Shell函数
### builtin 内建命令,Shell内建命令
### file 文件,磁盘文件,外部命令
### unfound 没有找到
  • \ + 回车 可以使我们在新的一行继续输入命令

2.shell的变量功能

  • 环境变量和自定义变量如PATH HOME 等,一般用大写字母表示
  • 变量显示前面一定要加上$,定义的时候不需要
  • 设值的时候左右一定不要有空格
  • export可以使变量编程环境变量
  • 输入env可以查看目前shell环境中的环境变量
  • 重要的环境变量
    • PATH变量,能不能在任何命令下执行对应的命令和PATH有很大关系
    • LANG变量,和语系有关
    • HOME,用户主文件夹
  • 输入set可以查看环境变量和自定义变量
  • $变量代表当前进程PID
  • ?变量代表上次命令回传码,成功是0
  • 环境变量与自定义变量的差别在于环境变量可以被子进程继续使用
  • 环境变量可以通过declare转成自定义变量
  • 可以通过read方法来获取输入的变量
$ read caibin                  
so handsome
$ echo $caibin
so handsome
  • declare/typeset 可以声明变量的类型,比如数字型,只读型,数组等等
  • bash环境中的数值运算最多到整数
  • ulimit与文件系统及程序的限制有关系

3.命令别名与历史命令

  • 通过alias和unalias来设置与取消别名,可以通过alias查看所有别名
  • 历史命令
    • ~/.bash_history 每次注销的时候写入,可以通过
    • ~/.bash_history可以记录HISTSIZE这个数量的数据
    • history -w强制将缓存写入到~/.bash_history

4.Bash Shell的操作环境

  • 通过type -a 命令的方式我们可以知道别名,环境变量,系统内置命令等的执行顺序
  • ★★★我们前面说的别名,自定义变量在注销bash后就会失效,如果要保留,需要写入配置文件
  • login shell和non-login shell的区别在于有没有完整的登录流程
  • login shell读取配置文件的步骤
    • /etc/profile 系统整体设置,必读
    • ~/.bash_profile和 ~/.bash_login和 ~/.profile,个人设置,从前往后只会读取一个,存在则后面的不读取,
  • non-login shell只会读取~/.bashrc
  • ~/.bashrc在login shell的.bash_profile中也会读取,一般我们把个人配置写到这里它里面就OK了
  • ~/.bash_logout注销bash后系统要做的操作
  • bash环境中的特殊符号
    在这里插入图片描述

5.数据流重定向

  • 标准输入 (stdin) 代码为 0 ,使用 < 或 <<
  • 标准输出 (stdout):代码为 1 ,使用 > 或 >>
  • 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>
  • 如果想要累加而不是覆盖,用>>
  • /dev/null 垃圾桶
  • 标准输出加标准错误&>
  • <<特殊,它代表的是结束输入,当我们输入<<后面的字符串时就结束
  • 命令之间用;分割开,分号前结束就执行分号后的
  • 如果要根据前面命令是否成功执行(也就是$?)可以使用&&或||
  • 管道命令只对标准输出有直接处理能力,对标准错误没有
  • 管道命令|的第二个命令必须有接受标准输出的能力
  • tee命令可以在管道中做一些操作,就像一个标准输出输出了两份
[root@www ~]# last | tee last.list | cut -d " " -f1
# 将输出存一份到last.list中;
  • tr 删除或替换内容
  • xargs 产生指令参数
cut -d':' -f1 /etc/passwd |head -n 3| xargs finger
# 由 finger account 可以获得该账号的相关说明内容
# xargs 将三个账号的名称发成 finger 后面需要的参数

[root@www ~]# find /sbin -perm +7000 | xargs ls -l 
-rwsr-xr-x 1 root root 70420 May 25 2008 /sbin/mount.nfs
-rwsr-xr-x 1 root root 70424 May 25 2008 /sbin/mount.nfs4
-rwxr-sr-x 1 root root 5920 Jun 15 2008 /sbin/netreport
# ls不支持管道命令,这时候xargs就派上用场了
  • 关于减号的用途
在管道命令中,经常会使用到前一个命令的stdout作为这次的stdin,某些命令需要用到文件名(例如tar)来进行处理时,该stdin与stdout可以利用“-”来替代。
举例:tar -cvf - /home | tar -xvf -
在上面这个例子中,我们将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout;经过管道后,将tar -cvf - /home传送给后面的tar -xvf -。后面的这个-这是取用前一个命令的stdout,因此我们就不需要使用文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值