shell_basic,visualbasicshell


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 --同上  

相关内容

    暂无相关文章