1、回顾基础命令
2、脚本
3、变量
4、别名
5、条件判断
6、test判断
一、回顾基础命令
shutdown –关机/重启
exit –退出当前shell
rmdir –删除空目录
du –查看目录占用的存储空间
df –查看已 经挂载的文件系统的空间使用情况
ln –创建链接
cat –显示文件的所有内容
head –显示文件的头部
tail –显示文件的尾部
less –分屏/分页 显示文件内容
dirname –取出目录
basename –取出文件名
history –历史命令
1、ln
# ln -s [目标] [源 — 创建软链接 (symbolic link)
# ln [目标] [源] — 创建硬链接
2、cat
concatinate,把文件的内容按顺序连接起来,输出到标準输出。目前,只需要简单理解成显示文件的内容即可
# cat f1 — 显示文件 f1 的内容到屏幕上
# cat -n f1 — 显示文件的内容,并且加上行号
# cat -A f1 — 打印出一些不可见的字符和位置标记
3、head
读取文件的头部
# head -n 3 /etc/passwd –读取文件前面三行
# head -n -3 /etc/passwd –读取文件时,丢掉文件的后三行;
# head -c 3 /etc/passwd –读取文件的前面三个字节
# head -c 10m /dev/zero > f1 –创建一个10M的文件
4、tail
读取文件的尾部
# tail -n 3 /etc/passwd — 读取文件的后面三行
# tail -c 3 /etc/passwd — 读取文件的后面三个字节
# tail -n +28 /etc/passwd — 读取文件中从第28行开始直到结尾的所有行
# tail -f /etc/passwd — 跟踪文件尾部内容的变化,常用观察日志文件的变化
5、history
# set -o history –启用命令历史功能 ,默认记录在文件 ~/.bash_history 中
# set +o history –关闭命令历史功能
# history –显示最近n条历史命令
注:以下三个变量用于控制命令历史的数量,以及是否记录时间戳
# vim /etc/bashrc –一般配置在该文件当中,用户级可配置在 ~/.bashrc
HISTSIZE=1000000 –最多存储多少条记录
HISTFILESIZE=2000000 –命令历史文件的最大尺寸
HISTTIMEFORMAT='[%Y-%m-%d %H:%M:%S] ‘ –命令历史的时间戳格式
export HISTSIZE HISTFILESIZE HISTTIMEFORMAT –把他们定义成环境变量
二、脚本
1、如何执行脚本
# vim test.sh
#!/bin/bash
echo ‘hello world’
# bash test.sh
# bash -x test.sh –显示脚本执行过程的信息
# sh test.sh
# source test.sh
# . test.sh
–上述兼为非标准执行脚本,脚本文件可以没有可执行权限;下列为标准执行:
# head -n 1 test.sh
#!/bin/bash
# chmod a+x test.sh
# ./test.sh
可直接将脚本放到 PATH 路径下,直接当命令运行
注意:shell 必须以 #! 开头,读作sha-bang,这两个字符用来标识文件类型,#! 用来告诉系统,这个文件里的内容将要用指定的解释器来解释,#! 之后的字符串将会被解释成一个程序,该程序用来解释当前文件。如果没有提供sha-bang这一行,当前 shell 将会自主猜测一个,但结果并不保证和预期一致;所以最好明确指定。./test.sh 的运行流程:
1、内核读取该脚本,检查文件类型标记,获取解释气得路径;
2、内核运行解释器;
3、解释器运行起来后,就打开脚本文件,解释其执行
linux 自带的诸多解释器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk
2、四则运算符
+ – * /
$(()) $[] expr let
# echo $((38%5)) –取余
# echo $[38/5] –求商
# echo $((10**2)) –10的平方
2.1、expr
# expr 14 % 9 –取余
# expr 34 / 9 –求商
# expr 30 * 3 –使用乘号时,必须用反斜线屏蔽其特定含义
# expr index “sarasara” a –抓取第一个字符数字串出现的位置
# expr substr “this is a test” 3 5 –抓取字串
# expr length “this is a test” –计算字串长度
2.2、let
let计算工具用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来
# no=20
# let no++ –自增
# let no– –自减
# let no+=10 –自增10
# let no=no+10 –同上
# let no-=15 –自减15
# let a=5+4 –变了a无须加 $ 符号
# echo $a
3、shell配置文件
/etc/profile –全局配置文件,
/etc/bashrc –全局配置文件,一般用来定义环境变了
~/.bash_profile –用户配置文件
~/.bashrc –用户配置文件
~/.bash_logout –用户配置文件,login shell 退出时会读取该文件
4、shell种类
根据shell 的启动方式不同,可以大致地把shell分为以下几种:
login shell –在文本界面登录,如su -;读取shell配置文件顺序如下:
/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc
interactive shell –gnome-terminal 中默认的shell;读取shell配置文件顺序如下:
~/.bashrc —— /etc/bashrc
non-interactive shell –用来运行脚本的shell
4.1、在~/.bashrc 中设置一个变量 v,要求该变量只出现在交互shell中
# vim ~/.bash_profile –标识shell 是否登录shell
LOGINSHELL=1
# vim ~/.bashrc –不是登录shell 时,才设置变量
if [ “$LOGINSHELL” != 1 ];then
v=”interactive shell only”
fi
5、命令优先级
别名 > 函数 > 内部命令 > 外部命令
6、shell特殊字符
对于shell来说,有些字符除了它本身的意义之外,还有特殊的意义,如果要在字符串中包含特殊字符,就必须通过引用(quoting)的方法来去除特殊字符的特殊意义。以下列出的是部分特殊字符:
~ –不被引用的话将会被shell 替换成家目录
& –把程序放到后台执行
$ –dollar 符,可用于参数展开
${} –变量处理,可对变量的内容做替换,删除,抽取等操作
* –星号,通配符,匹配所有字符
? –问号,通配符,匹配任意一个字符
() –命令组
{} –命令组
“” –双引号,引用符号;可以去除大多数特殊字符的特殊意义,除 $;`;!; 外
” –单引号,引用符号;可以去除所有特殊字符的特殊意义,除自己本身
. –相当于source命令;可用于设置隐藏文件;用于目录名时,代表当前目录
/ –斜杠,路径分隔符,根目录
–反斜杠,可用来去除单个字符的特殊意义,也就是所谓的“转义“,也可用于表示特殊字符,如换行符 (n)
“ –反撇号,命令优先执行,和$()含义是一样的;如果有嵌套那么不能用“号
$(())和 $[] –运算符
: –空命令
; –命令分割;不去考虑上一条命令所执行的结果
;; –case 选项的结束符
# –注释
&& –逻辑与;可对命令进行分割;但是需要考虑上一条命令所执行的结果
|| –逻辑或;可对命令进行分割;不需要考虑上一条命令执行结果
—————————————————————-
# echo ‘hello world;’ “hello world;” hello world; –用三种引用符合去除空格的特殊意义
三、变量
1、本地变量
当前用户自定义的变量;当前进程有效,其他进程或者当前进程的子进程无效
# a=123
# echo $a
# unset a –取消变了定义
2、环境变量
当前进程有效,并且能被子进程调用;
# env –查看当前系统所有环境变量
# set –查看当前系统所有环境变量和临时变量
# echo $PATH — 显示PATH变量的内容
# export hi=hello –定义环境变量;工作当中一般喜欢把即用的环境变了写在 ~/.bash_profile
几个常见环境变量:
PATH –影响命令的搜索
PS1 –命令提示符
TMOUT –超时时间,单位为S,时间一到,自动退出 interactive shell ;所以最好将其设为只读变量 # declare -r TMOUT=60
HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT –命令历史
3、系统变量
又叫bash中内置的变量;shell本身已经固定好的一些变量
$# –脚本后面接参数个数
$* –脚本后面所有的参数(被双引号包含则被当成一个字符串输出)
$@ –脚本后面所有的参数(被双引号包含还是保留各参数的边界)
$? –上一条命令执行后返回的状态
$$ –当前进程的进程号
$! –后台运行的最后一个进程号
!$ –最后一条命令或参数
!! –最后一条命令的历史记录
$0 –当前程序的程序名或进程
$1~$n –位置参数变量
#!/bin/bash
echo “$0 = $0”
echo “$# = $#”
echo “$* = $*”
echo “$1 = $2”
echo “$7 = $7”
echo “$11 = ${11}”
# chmod a+x test.sh
# ./test.sh a b c
4、变量定义
a、默认下,变量类型没啥要求。可以给变量赋任何值,但是等号两边不能有任何的空格
b、变量名区分大小写
c、变量名不能以数字或者特殊符号开头
d、将命令所执行的结果保存到变量
5、调用变量
# a=$(hostname)
# A=123456789
# echo $A
# echo ${A:2:3}
6、数组
数组的定义:用小括号扩起来定义数组,括号里的元素用空格隔开
# array[0]=var1
# array[1]=var2
# array[2]=var3
# array=(var1 var2 var3) –等同于上述三行,定义数组
# echo ${array[0]} –取数组第一个值
# echo ${array[*]} –取数组所有值
# echo ${array[@]} –同上
7、declare 定义有类型的变量
-i –将变量看成整数
-r –定义只读变量
-x –将变量导出到环境变量
-a –将变量看成数组
8、read 交互式定义变量
-p –提示信息
-n –字符数
-t –超时
-s –不显示
四、別名
命令的別名,顾名思义,就是可以通过別的名字来执行命令。通常用于简化命令的输入,或者为命令增加一些参数,或者是单纯地为命令添加多个访问名称。
# alias cp mv rm –查看cp, mv, rm这三个命令是不是別名
# unalias rm — 删除别名 rm
# alias cdyum=’cd /data/yum’ — 简化输入
# alias rm=’rm -i’ — 为命令增加参数
— 通常別名是在配置文件~/.bashrc 中设置的
1、验证别名、函数、内部命令、外部命令的优先级别
# alias pwd=’echo it is an alias’ –创建一个 pwd 别名
# function pwd() { echo “this is a function”; } –创建一个 pwd 函数
# pwd –运行pwd,发现输出是别名
# unalias pwd –删除别名,再运行 pwd,发现输出是函数内容
# unset pwd –删除函数,再运行 pwd,才是输出当前所在路径
所以:别名 > 函数 > 内部命令 > 外部命令
五、条件判断
# vim test
———————-
if [ 条件 ];then
command…
fi
———————-
if [ 条件 ];then
command…
else
command…
fi
———————-
if [ 条件1 ];then
command1…
elif [ 条件2 ];then
command2…
else
command3…
fi
———————-
if [ 条件1 ];then
command1…
if [ 条件2 ];then
command2…
fi
else
if [ 条件3 ];then
command3…
elif [ 条件4 ];then
command4…
else
command5…
fi
fi
六、test判断
test == [ judge ]
1、文件存在与否的判断
# vim test.sh
#!/bin/bash
if test -e $1;then –是否存在;还有 -p;-c;-b;-L
if [ -f $1 ];then –使用 [ judge ] 替换
if test -f $1;then –是否存在并且为普通文件
if test -d $1;then –是否存在并且为目录
if test -S $1;then –是否存在并且套接字文件
echo ‘YES’
fi
# chmod a+x test.sh
# ./test.sh [path]
2、文件权限相关判断
-r;-w;-x –是否有读,写,执行权限
-u –是否有suid
-g –是否有sgid
-k –是否有t位
-s –是否为空白文件,-s表示非空;! -s 空文件
3、字符串判断
= –等于则为真,等于号两边必须有空格;也可以是:==
!= –不相等则为真
-z 字符串 –字符串的长度为零则为真
-n 字符串 –字符串的长度不为零则为真
if test $num1 = $num2;then
if [ $num1 = $num2 ];then
if [ -n $num1 ];then
4、数值判断
-eq –等于则为真
-ne –不等于则为真
-gt –大于则为真
-ge –大于等于则为真
-lt –小于则为真
-le –小于等于则为真
if test $[num1] -eq $[num2];then
if [ $[num1] -eq $[num2] ];then
5、逻辑判断
-a 和 && –逻辑与
-o 和 || –逻辑或
! –非
优先级:与>或>非
if test -e $1 -o -e $2;then –判断是否有一个文件存在
if [ -e $1 -o -e $2 ];then –同上
if test ! -e $1 -o ! -e $2;then –判断两个文件没有同时存在
if [ ! -e $1 -o ! -e $2 ];then –同上
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END