shell 的作用 :命令解释器
shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果反悔在标准终端上。
shell在Linux系统中的位置
部分shell基础命令
1,历史命令 history [-raw] histfiles 默认写入~/.bash_history
默认显示最近的1000条。配置文件在/etc/profile中
n:数字,就是要列出最近的n笔命令行表的意思
-a: 将目前新增的history命令新增如histfiles中,若是灭有加histfiles,则默认写入~/.bash_history
-w:将目前的history记忆内容写入histfiles中。
-a和-w的区别如下:
历史口令的调用
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
命令别名配置功能(alias)
用grep命令做演示
这样改,只是在当前可用,并不是全局可用。若想全局调用,则需要在/etc/profile下
增加 alias grep='grep --color=auto',这里最好是执行一下。
删除别名
unalias 别名
多命令顺序执行
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 逻辑与 命令1&&命令2 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不回执行
|| 命令1||命令2 逻辑或 当命令1执行不正确,则命令2才会执行
如图:没有touch test.sh文件,所以ls不会显示,输出到黑洞,即不正确,那么good就不执行,执行not good
last 可以输出帐号、终端机、来源,日期时间,并且是排列整齐的。
tee
tee [-a] file
-a : 以累加的方式,将数据加入file当中
栗子:
[root@www~]# last | tee last.list| cut -d " " -f1
# 这个范例可以让我们将last 的输出存一份到last.list文件中;
[root@www~]# ls -l /home | tee ~/homefile| more
# 这个范例则是将ls 的数据存一份到~/homefile,同时屏幕也有输出信息!
[root@www~]# ls -l / | tee -a ~/homefile| more
# 要注意!tee 后接的文件会被覆盖,若加上-a 这个选项则能将信息累加。
shell 脚本
#! /bin/bash 是必须的,指出shell的类型
vim datewho.sh
执行这个shell文件,有两种,第一个用sh直接执行,第二个先赋权限。
shell中的变量和符号
变量的打印echo
变量的赋值
最后输出的时候最好加上{}。
变量法则:
1,变量和变量内容以一个等号来连接。如上所示
2,等号两边不能直接空格符。
3,变量名称只能是英文字母和数字,但开头字符不能是数字
4,变量内容中若有空格符,可使用双引号或者单引号将变量内容结合起来
5,单引号内的特殊字符则仅为一般字符 (纯文本)
6,若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量
7,取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置 unset myname
栗子:如何让我刚刚配置的name=zhangsan可以用在下个shell的程序?
[root@www~]#name=zhangsan
[root@www~]#bash <==进入到所谓的子程序
[root@www~]#echo $name <==子程序:再次的echo一下;
<==嘿嘿!并没有刚刚配置的内容喔!
[root@www~]#exit <==子程序:离开这个子程序
[root@www~]#exportname
[root@www~]#bash <==进入到所谓的子程序
[root@www~]#echo $name <==子程序:在此运行!
zhangsan <==看吧!出现配置值了!
[root@www~]#exit <==子程序:离开这个子程序
内部命令
$# : 传送给shell程序的位置参数的数量
$? : 最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。0表示没有错误,其他值表示有错
$0 : shell程序的名称
$* : 调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”…形式保存的参数
$@ : “参数1 参数2”…形式保存的参数
$n : 第n个参数
$$ : 本程序的PID