shell基础
1、shell概述
作用:命令解释器
shell分类:#cat /etc/shells
/sbin/nologin -->不让账号登录
/bin/bash -->默认的shell,与sh兼容
/bin/sh -->从UNIX继承来的一套
/bin/csh -->BSD系统,语法与C语言类似
查看当前系统具体用的哪个shell:
#echo $SHELL
2、shell中的常用命令
a、history查看历史命令
历史命令默认1000条,可修改/etc/profile中的“HISTSIZE=1000
”字段来进行配置。
#!n:执行第n条历史命令
#!!:重复执行上一条命令
#!字符:重复执行以该字符开头的最后一个历史命令
b、alias起别名
别名永久保存:在/etc/bashrc文件末尾追加”alias grep='grep --color=never'“,然后使用“source /etc/bashrc”让配置立即生效!
unalias:取消别名
c、执行多条命令
';':顺序执行多条命令
'&&':前面命令执行成功才执行后面命令,否则后面命令不执行
'||':前面命令不成功才执行后面命令,否则后面命令不执行
举例:ls test.sh > /dev/null&& echo "good" || echo "not good“
注意:重定向不影响命令错误与否的最终判断。
ls test.sh >& /dev/null
等同于:ls test.sh 1>/dev/null 2>/dev/null
d、'|'管道符号
举例:#ls -l | grep "test"
e、echo显示字符串
--help选项:/bin/echo –help
--version选项:/bin/echo --version
3、shell脚本的简单使用
习惯命名:“***.sh”
基本元素:
#!/bin/bash -->必须写,指定接下来要使用shell
#字符串 -->注释信息
脚本内容:常见的命令,变量,控制语句
举例:
#!/bin/bash
#我们的第一个脚本
pwd
date;who
脚本的运行:
i、可以直接使用sh命令来运行脚本
例:$sh f3.sh
ii、可以修改脚本文件的可执行权限
例:$chmod +x f3.sh
$./f3.sh
4、shell中的变量
命名规范:由字母、数字和_组成,但是不能以数字开头。
注意:bash中变量类型默认为字符串,如果进行数字运算必须修改为数值型。
变量的分类:本地变量(一般是脚本中声明的变量)、环境变量(在操作系统上声明的变量,多个脚本都能使用,用户可以修改其值)、内部变量(系统中声明的变量,用户不能修改值)
a、本地变量
语法格式:变量名=值
注意:=左右没有空格;值中如果有空格,则需要用""括起来;变量名严格区分大小写。
举例:
#name="zhang san"
#echo $name
#echo ${name}is good man
建议:变量使用时加上{}
set命令:查看本地所有变量
例:#set | grep "name"
unset命令:清除变量
例:#unset name
b、环境变量
概念:进程(正在运行的软件或脚本)
举例:vi f1.sh
#!/bin/bash
echo "当前账号的家$HOME"
注意:环境变量字母都大写
设置环境变量:
#环境变量名=值
#export 环境变量名 -->告诉操作系统该变量是环境变量
env命令:查看所有环境变量
扩展:HOME(存放家目录)、USER(当前账号)、SHELL(当前系统使用的shell)、LANG(当前系统使用的语言)、PWD(当前工作目录)、PATH(保存软件的可执行文件路径)
注意:PATH中的路径用‘:’隔开,谁在前先使用谁。
unset命令:清除环境变量
环境变量的永久保存:将环境变量的声明放到~/.bash_profile
注意:按照传统,定义的变量如PATH放到.bash_profile中,而像别名函数等放在.bashrc中.
c、内部变量
举例:TODO
$#参数个数
$?最后命令执行是否成功,0表示成功
$0脚本名
$*/$@参数列表
$n第n个参数
$$本进程id,即pid
d、特殊符号
'':原样输出
"":除了$、\、`之外都是普通字符
``:在字符串中当作命令来执行
\:针对特殊字符,想在双引号中原样输出,需要转义