一、回看基础命令

shell_basic,visualbasicshell

1、回看基础命令 2、脚本 三、变量 肆、小名 五、条件判断 六、test判断  
壹、回看基础命令 shutdown –关机/重启 exit –退出当前shell rmdir
–删除空目录 du –查看目录占用的贮存空间 df –查看已
经挂载的文件系统的半空中应用景况 ln –成立链接 cat –显示文件的富有剧情head –展现文件的尾部 tail –显示文件的尾巴 less –分屏/分页
显示文件内容 dirname –取出目录 basename –取出文件名 history –历史命令
一、ln # ln -s [目标] [源 — 创设软链接 (symbolic link) # ln
[目标] [源] — 创立硬链接 二、cat
concatinate,把公文的内容按梯次连接起来,输出到标準输出。近年来,只要求简单了然成突显文件的始末即可
# cat f一 — 突显文件 f一 的始末到显示器上 # cat -n f一 —
展现文件的剧情,并且增进行号 # cat -A f壹 —
打字与印刷出某个不可知的字符和岗位标记 3、head 读取文件的尾部 # head -n 3
/etc/passwd –读取文件后面3行 # head -n -三 /etc/passwd
–读取文件时,丢掉文件的后3行; # head -c 三 /etc/passwd
–读取文件的方今七个字节 # head -c 十m /dev/zero > f1–创制2个10M的文书 四、tail 读取文件的尾巴 # tail -n 3 /etc/passwd —
读取文件的前边3行 # tail -c 叁 /etc/passwd — 读取文件的末端多少个字节 #
tail -n +2八 /etc/passwd — 读取文件中从第二八行开端直到最终的装有行 #
tail -f /etc/passwd — 跟踪文件尾巴部分内容的生成,常用旁观日志文件的变型
五、history # set -o history –启用命令历史意义 ,私下认可记录在文书
~/.bash_history 中 # set +o history –关闭命令历史功用 # history
–展现近来n条历史命令
注:以下八个变量用于控制命令历史的数码,以及是还是不是记录时间戳 # vim
/etc/bashrc –1匹配备在该公文其中,用户级可安顿在 ~/.bashrc
HISTSIZE=一千000 –最多囤积多少条记下 HISTFILESIZE=贰仟000
–命令历史文件的最大尺寸 HISTTIMEFO路虎极光MAT='[%Y-%m-%d %H:%M:%S] ‘
–命令历史的命宫戳格式 export HISTSIZE HISTFILESIZE HISTTIMEFO奥迪Q7MAT
–把她们定义成环境变量   2、脚本 一、如何进行脚本    # 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
将会自主猜想二个,但结果并不有限帮衬和预期1致;所以最棒强烈钦定。./test.sh
的运转流程: 一、内核读取该脚本,检查文件类型标记,获取解释气得路径;
2、内核运维解释器; 叁、解释器运营起来后,就开辟脚本文件,解释其执行
linux
自带的多多解释器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk
贰、肆则运算符 + – * / $(()) $[] expr let # echo $((38%5)) –取余 #
echo $[38/5] –求商 # echo $((10**2)) –10的平方 2.1、expr # expr
14 % 9 –取余 # expr 34 / 9 –求商 # expr 30 \* 三–使用乘号时,必须用反斜线屏蔽其一定含义 # expr index “sarasara” a
–抓取第三个字符数字串出现的岗位 # expr substr “this is a test” 三 伍–抓取字串 # expr length “this is a test” –计算字串长度 2.2、let
let总计工具用于实践1个或多少个表明式,变量总括中不供给丰硕 $
来代表变量。如若表明式中包罗了空格或其余特殊字符,则必须引起来 # 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  
四.一、在~/.bashrc 中安装二个变量 v,供给该变量只现出在互相shell中 # vim
~/.bash_profile –标识shell 是不是登录shell LOGINSHELL=一 # vim ~/.bashrc
–不是登录shell 时,才设置变量 if [ “$LOGINSHELL” != 1 ];then
v=”interactive shell only” fi 五、命令优先级 小名 > 函数 > 内部命令
> 外部命令 陆、shell特殊字符
对于shell来说,某些字符除了它自己的意思之外,还有卓殊的含义,借使要在字符串中带有特殊字符,就必须通过引用(quoting)的点子来去除特殊字符的分外意义。以下列出的是一些特殊字符:
~ –不被引用的话将会被shell 替换立室目录 & –把程序嵌入后台执行 $
–dollar 符,可用以参数举办 ${}
–变量处理,可对变量的内容做替换,删除,抽取等操作 *
–星号,通配符,相称全数字符 ? –问号,通配符,相配任意一个字符 ()
–命令组 {} –命令组 “”
–双引号,引用符号;能够去除半数以上特殊字符的超过常规规意义,除 $;`;!;\ 外 ”
–单引号,引用符号;能够去除全数特殊字符的异样含义,除自身作者 .
–相当于source命令;可用以安装隐藏文件;用于目录名时,代表当前目录 /
–斜杠,路径分隔符,根目录 \
–反斜杠,可用来去除单个字符的奇特含义,约等于所谓的“转义“,也可用以表示特殊字符,如换行符
(\n) “
–反撇号,命令优先执行,和$()含义是同等的;若是有嵌套那么不能够用“号
$(())和 $[] –运算符 : –空命令 ;
–命令分割;不去思考上一条命令所实施的结果 ;; –case 选项的收尾符 #
–注释 && –逻辑与;可对命令进行划分;不过需求思量上一条命令所推行的结果
|| –逻辑或;可对命令举行私分;不需求思量上一条命令执行结果
—————————————————————- # echo
‘hello world;’ “hello world;” hello\ world;
–用二种引用符合去除空格的特有意义   叁、变量 一、本地变量
当前用户自定义的变量;当前经过有效,其余进度恐怕当前经过的子进度无效 #
a=123 # echo $a # unset a –撤消变了定义 贰、环境变量
当前经过有效,并且能被子进程调用; # env –查看当前系统具备条件变量 #
set –查看当前系统全数环境变量和权且变量 # echo $PATH —
展现PATH变量的内容 # export hi=hello
–定义环境变量;工作个中一般喜欢把即用的环境变了写在 ~/.bash_profile
多少个科普环境变量: PATH –影响命令的探寻 PS① –命令提醒符 TMOUT
–超时时间,单位为S,时间1到,自动退出 interactive shell
;所以最佳将其设为只读变量 # declare -r TMOUT=60 HISTSIZE,
HISTFILESIZE, HISTTIMEFOTiguanMAT –命令历史   三、系统变量
又叫bash中置放的变量;shell自己已经固化好的有的变量 $#
–脚本后边接参数个数 $*
–脚本前边全体的参数(被双引号包蕴则被当成1个字符串输出)
[email protected]
–脚本前边全部的参数(被双引号包蕴照旧保留各参数的疆界) $?
–上一条命令执行后再次回到的事态 $$ –当前历程的长河号 $!
–后台运维的末梢八个经过号 !$ –最后一条命令或参数 !!
–最终一条命令的野史记录 $0 –当前先后的顺序名或进度 $一~$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、将指令所执行的结果保存到变量 伍、调用变量 # a=$(hostname) #
A=123456789 # echo $A # echo ${A:二:3} 陆、数组
数组的概念:用小括号扩起来定义数组,括号里的成分用空格隔离 #
array[0]=var1 # array[1]=var2 # array[2]=var3 # array=(var1var二 var三) –等同于上述3行,定义数组 # 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 中设置的
一、验证别称、函数、内部命令、外部命令的事先级别 # alias pwd=’echo it is
an alias’ –创设一个 pwd 小名 # function pwd() { echo “this is a
function”; } –创设3个 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 ] 一、文件存在与否的论断 # vim test.sh #!/bin/bash if test -e
$一;then –是或不是存在;还有 -p;-c;-b;-L if [ -f $1 ];then –使用 [ judge
] 替换 if test -f $一;then –是还是不是存在并且为普通文书 if test -d $一;then
–是或不是留存并且为目录 if test -S $一;then –是或不是留存并且套接字文件 echo
‘YES’ fi # chmod a+x test.sh # ./test.sh [path] 二、文件权限相关判断
-r;-w;-x –是还是不是有读,写,执行权限 -u –是不是有suid -g –是还是不是有sgid -k
–是或不是有t位 -s –是还是不是为空白文件,-s代表非空;! -s 空文件 叁、字符串判断
= –等于则为真,等于号两边必须有空格;也得以是:== != –不等于则为真 -z
字符串 –字符串的长短为零则为真 -n 字符串 –字符串的长度不为零则为真 if
test $num1 = $num二;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 $壹 -o -e $二;then
–判断是或不是有2个文本存在 if [ -e $1 -o -e $2 ];then –同上 if test !
-e $1 -o ! -e $二;then –判断三个公文并未有同时设有 if [ ! -e $1 -o ! -e
$2 ];then –同上  

一、回看基础命令
二、脚本 三、变量 四、外号 伍、条件判断 六、test判断 1、回想基础命令
shutdown –关机/重启exit –退出当…

一、回看基础命令

一、极端打字与印刷

[root@cai ~]# echo welcome to bash!

welcome to bash!

 

[cairui@cai ~]$ echo ‘welcome to bash!’

welcome to bash!

 

[cairui@cai ~]$ echo “welcome to bash\!”

welcome to bash\!

(注意,双引号内不可能一直用特殊符号,须求用转义符\)

 

[cairui@cai ~]$ printf “hello world”

hello world

 

#!/bin/bash

#filename:printf.sh

 

printf  “%-5s %-10s %-4s\n” no name mark

printf  “%-5s %-10s %-4.2f\n” 1 sarath 80.3456

printf  “%-5s %-10s %-4.2f\n” 2 james 90.9989

printf  “%-5s %-10s %-4.2f\n” 3 jeff 77.564

获得如下结果

[cairui@cai shell]$ sh printf.sh

no    name       mark

1     sarath     80.35

2     james      91.00

3     jeff       77.56

 

一.行事原理

  %s ,%c,%d和%f都以格式替换符,其所对应的参数能够放置带引号的格式字符串之后。

  %-五s指明格式为左对齐且宽度为伍的字符串替换,不够的用空格补上。

  对于%-4.二f,个中.2钦赐保留三个小数位。

二.填补内容

(一)在echo中间转播义换行符

[cairui@cai shell]$ echo -e “1\t2\t3”

1 2 3

(二)打印彩色输出

重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

打字与印刷彩色文本

 

[cairui@cai shell]$ echo -e “\e[1;31m this is red text \e[0m”

 this is red text

 

设置彩色背景,重置=0,浅紫蓝=40,紫蓝=四一,海水绿=4二,梅红=四三,青莲=4四,深黄=肆5,浅蓝=④陆,赫色=四7

 

 

2、脚本

2、脚本

二、玩转变量和环境变量

  在bash中,每一个变量的值都是字符串。无论你给变量赋值时有未有引号,值都以以字符串方式存在。有一些与众分歧的变量会被shell环境和操作系统环境用来存储1些特地的值,那类变量就叫做环境变量。

Cat /proc/$PID/environ(查看运转时的环境变量)

例子:

[cairui@cai shell]$ pgrep mysql

11029

11313

[cairui@cai shell]$ sudo cat /proc/11313/environ

TERM=xtermOLDPWD=/application/mysqlPATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/binPWD=/application/mysqlSHLVL=3MYSQL_HOME=/application/mysql_=/usr/bin/nohup

[cairui@cai shell]$ sudo cat /proc/11313/environ |tr ‘\0’ ‘\n’

TERM=xterm

OLDPWD=/application/mysql

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/bin

PWD=/application/mysql

SHLVL=3

MYSQL_HOME=/application/mysql

_=/usr/bin/nohup

 

一.实战演习

 

[cairui@cai shell]$ var=value

[cairui@cai shell]$ echo $var

value

 

Variable.sh代码如下:

#!/bin/bash

fruit=apple

count=5

echo “we have $count $fruit(s)”

[cairui@cai shell]$ sh variable.sh

we have 5 apple(s)

 

Export命令正是用来安装环境变量:

[cairui@cai shell]$ echo $PATH

/application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin

[cairui@cai shell]$ export PATH=”$PATH:/home/cairui”

[cairui@cai shell]$ echo $PATH

/application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin:/home/cairui

 

二.补充内容

length=${#var}

例如:

[cairui@cai shell]$ vai=1234567890

[cairui@cai shell]$ echo ${#vai}

10

 

3、变量

3、变量

三、利用函数添加环境变量

  PATH=/usr/bin;/bin

那意味倘若shell须求进行二进制可执行文件时,它会率先查找/usr/bin,然后是/bin

 

4、别名

4、别名

四、接纳shell进行数学运算

  在bash shell环境中,能够利用let,[],(())执行基本的算术操作。而在实行尖端操作时,expr和bc那多个工具也会要命有效。

1.实例

#!/bin/bash

#filename:jia.sh

no1=4;

no2=5;

let result=no1+no2

echo $result

[cairui@cai shell]$ sh jia.sh

9

自加操作

let no1++

自减操作

let no1–

简写情势

let no+=6

let no-=6

它们各自等于let no=no+六和let no=no-陆

(二)bc是三个数学高级工具,那个Mini计算器包括了汪洋的选项。

 

[root@cai ~]# echo “4*8″|bc

32

 

no=54

result=’echo “$no*1.5”|bc’

echo $result

81.0

l 设定小数精度。下边,参数scale=二将小数位个数设置为2.

[cairui@cai shell]$ echo “scale=2;3/8″|bc

.37

进制转换。用bc能够将一种进制系统转换为另壹种。(十进制转换二进制)

#!/bin/bash

#用途:数字转换

 

no=100

echo “obase=2;$no” |bc

 

no=1100100

echo “obase=10;ibase=2;$no” |bc

[cairui@cai shell]$ sh shuzizhuanhuan.sh

1100100

100

l 总结平方及平方根

[cairui@cai shell]$ echo “sqrt(100)”|bc

10

 

[cairui@cai shell]$ echo “10^10″|bc

10000000000

 

5、条件判断

伍、条件判断

五、玩转文件讲述符及重定向

  文件讲述符是与公事输入、输出相关联的平头。它们用来跟踪已打开的文本。最常见的公文讲述符是stdin(标准输入)、stdout(标准输出)和stderr(标准错误)。

0—–stdin

1—–stdout

2—–stderr

1.实例

[cairui@cai shell]$ echo “this is a sample text ” >temp.txt

[cairui@cai shell]$ cat temp.txt

this is a sample text

[cairui@cai shell]$ echo “this is a sample text ” >>temp.txt

[cairui@cai shell]$ cat temp.txt

this is a sample text

this is a sample text

当命令现身谬误时,错误新闻就会被打字与印刷出来

 

[cairui@cai shell]$ ls +

ls: cannot access +: No such file or directory(错误新闻)

 

2.做事原理

>等同于1>;对于>>也是同一1>>

(壹)将文件重定向到命令

cmd < file

(二)将脚本内部的文本块实行重定向

#!/bin/bash

cat<<EOF>log.txt

LOG FILE HEADER

this is a test log

function:system statistics

EOF

 

[cairui@cai shell]$ sh log-txt.sh

[cairui@cai shell]$ cat log.txt

LOG FILE HEADER

this is a test log

function:system statistics

 

6、test判断

6、test判断

六、数组和关联数组

array_var=(1  2  3  4  5  6)#这一个值将会蕴藏在以0为初始索引的连年地方上

除此以外还是能将数组定义为一组“索引-值”

array_var[0]=”test1”

array_var[1]=”test2”

……

……

……

……

array_var[5]=”test6”

 

echo $array_var[0]

test1

 

echo $array_var[*]

test1 test2 test3 test4 test5 test6

 

打字与印刷数首席执行官度

echo ${#array_var[*]}

6

 

 

 

七、利用别称

(一)能够用以下方法开创四个别称

alias new_command=’command sequence’

(贰)上述别称只是权且的。为了使别称永久生效,能够将它位于~/.bashrc文件中

echo ‘alias cmd=”commadn seq”’ >> ~/.bashrc

(3)删除别称,只须要从~/.bashrc中删除就足以了

 

一、回想基础命令

1、回看基础命令

八、获取极限音讯

  tput和stty是七款终端处理工科具。

1.实例

l 获取极限的行数和列数:

tput cols

tput lines

l 打字与印刷当前极端名:

tput longname

l 将光标移动到坐标(100,100)处:

tput cup 100 100

l 设置极端背景观:

tputsetb n

里面,n可以在0到7之内取值

l 设置文本样式为粗体

tput bold

l 设置下划线的起止:

tput smu1

tput rmu1

l 删除从此时此刻光标地方到行尾的富有情节:

tputed

l 在输入密码时,不应有出示输入内容:

#!/bin/bash

#filename:password.sh

echo -e “enter password:”

stty -echo

read password

stty echo

echo

echo password read

 

shutdown –关机/重启

shutdown –关机/重启

九、获取、设置日期和延缓

   很多主次要以不一样的格式打字与印刷日期、设置日期和时间、根据日期和时间实施操作。延时经常用于在程序执行进度中提供一段等待时间(比如一秒)。例如需求在本子中对某项职分每隔伍秒监视贰遍,就需求精晓哪些在程序中加入延时。

1.实例

(1)[cairui@cai support-files]$ date

Tue Jun  6 15:27:22 CST 2017

(贰)打字与印刷纪元时:

[cairui@cai support-files]$ date +%s

1496734094

 

[cairui@cai support-files]$ date –date “jan 20 2011” +%A

Thursday

(3)用格式串结合+作为date命令的参数:

[cairui@cai support-files]$ date “+%d %b %y”

06 Jun 17

(4)设置时间和日期:

date -s “格式化的日子字符串”

例子:

date -s “21 june 2009 11:01:22”

(伍)有时,大家需求检讨一组命令所消费的时光,以下代码:

#!/bin/bash

#filename:time_take.sh

start=$(date +%s)

commands;

statements;

 

end=$(date +%s)

difference=$((end – start))

echo time taken to execute commands is $difference seconds

2.行事原理

日期内容

格式

星期

%a(A)

%b(B)

%d

固定格式日期(mm、dd、yy)

%D

%y(Y)

小时

%I或%H

分钟

%M

%S

纳秒

%N

Unix纪元时(以秒为单位)

%s

 

 

三.补偿内容

 在本子中推迟执行一段时间,可以用sleep;$sleep no_of_seconds.例如,下边包车型客车剧本就利用tput和sleep从0起初计数到40:

#!/bin/bash

#filename:sleep.sh

echo -n Count:   (echo -n不换行输出)

tput sc

 

count=0;

while true;

do

  if [ $count -lt 40 ];

  then

      let count++;

      sleep 1;

      tput rc

      tput ed

      echo -n $count;

  else exit 0;

  fi

done

  在地点的例证中,变量count初步化为0,随后每循环三遍便加一.echo语句打字与印刷出count的值。用tput sc存款和储蓄光标的职责。在历次循环中,通过苏醒在此以前存款和储蓄的光标的职位,在顶峰中打印出新的count的值。恢复生机光标的命令是tput rc。tput ed清除从脚下光标地点到行尾之间的兼具剧情,使得旧的count值能够被消除并写入新值。循环内的一分钟延迟是经过sleep命令来兑现。

 

exit –退出当前shell

exit –退出当前shell

十、调剂脚本

(1)bash -x script.sh or sh -x script.sh

(二)使用set -x和set +x对剧本实香港行政局地调试。例如:

#!/bin/bash

#filename:debug.sh

for i in {1..6};

do

    set -x

    echo $i

    set +x

done

echo “script executed”

[cairui@cai shell]$ sh debug.sh

+ echo 1

1

+ set +x

+ echo 2

2

+ set +x

+ echo 3

3

+ set +x

+ echo 4

4

+ set +x

+ echo 5

5

+ set +x

+ echo 6

6

+ set +x

script executed

在上头的脚本中,只会打字与印刷出 echo
$i的调节和测试音信。因为运用了-x和+x对调节区域拓展了限制。

(叁)前面二种调节和测试都是内建的。他们常常以稳定的格式生成调节和测试消息。不过在众多状态下,我们须求以自定义格式突显调节和测试新闻。能够透过传递_DEBUG环境变量来树立那类调试风格。

#!/bin/bash

function DEBUG()

{

  [ “$_DEBUG” == “on” ]  && $@ || :

 

}

for i in {1..10}

do

  DEBUG echo $i

done

~          

[root@cai shell]# _DEBUG=on ./DEBUG.sh

1

2

3

4

5

6

7

8

9

10

咱俩在每1个亟待打字与印刷调节和测试消息的讲话前增进DEBUG。假设未有把_DEBUG=on传递给脚本,那么调节和测试音信就不会被打字与印刷出来。在bash中,命令“:”告诉shell不要开始展览此外操作。

 

rmdir –删除空目录

rmdir –删除空目录

十一、函数和参数

1.实例

大家得以创立执行一定任务的函数,也能够创立能够承受参数的函数。

(壹)定义函数:

function fname()

{

  statements;

}

或者

fname()

{

  statements;

}

(2)只须求采用函数名就能够调用有个别函数:

$fname  #执行函数

(三)参数能够传递给函数,并由脚本进行走访:

fname arg1 arg2;#传递函数

以下是函数fname 的定义。在函数fname中,包括了各样访问函数参数的方式。

fname()

{

echo $一,$二;访问参数一和参数贰

echo “$@”;以列表的主意二回性打字与印刷全部参数

echo “$*”;类似于¥@,不过参数被看做单个实体

return 0;返回值

}

l $壹是率先个参数

l $二是第3个参数

l $n是第n个参数

l “$@”被扩展成”$一” “$贰” “$三”等

l “$*”被扩充成”$1c$2c$三”,当中c是IFS的率先个字符

l “$@”要比$*用的多。

二.补给内容

(一)递归函数

f() {echo $1;f hello;sleep 1;}

(二)导出函数

export -f fname

 

du –查看目录占用的积存空间

du –查看目录占用的仓储空间

十二、不适用回车键来读取n个字符

  read是贰个要害的bash命令,它用于从键盘或标准输入中读取文本。大家得以应用read以互相的款型读取来自用户的输入,但是read能做的可远远不止于此。任何编制程序语言的输入库大多皆以从键盘读取输入;但唯有当回车键按下的时候,才标志着输入实现。而略带游戏里只要求按q就能放出技能。

(壹)下边包车型客车言辞从输入中读取n个字符并存入变量variable_name;

read -n number_of_chars variable_name

例如:

read -n 2 var

echo $var

(二)用无回显的主意读取密码:

read -s var

(三)展现提醒音讯:

read -p “enter input:” var

(四)在特定时间限制内读取输入:

read -t timeout var

 

read -t 2 var  #在二秒内将键入的字符串读入变量var

(5)用特定的定界符作为输入行的利落:

read -d delim_char var

 

read -d “:” var

hello:#var 棉被服装置为hello

 

df –查看已 经挂载的文件系统的空中应用情形

df –查看已 经挂载的文件系统的长空利用情形

十三、运作命令直至执行成功

  在平时工作中央银行使shell时,有时候命令唯有满意有些条件只怕某种外部事件(例如文件可以被下载)操作才能得逞进行。这种情状下,你恐怕希望再一次执行命令,直到成功停止。

1.实例:

遵照以下方法定义函数:

repeat()

{

 while true

 do

$@ && return

done

}

依旧把它放入shell的rc文件,更有益于使用:

repeat() {while true;do $@ && return;done}

2.做事原理

  我们创造了函数repeat,它涵盖了多个极端while循环,该循环执行以参数方式(通过$@访问)传入函数的指令。假诺命令执行成功,则赶回,进而Infiniti循环。

3.填补内容

(一)1种越来越快的做法

repeat() {while :; do $@ && return; done } 比第1种形式快

(2)扩充延时

repeat wget -c ……..

repeat() {while :; do $@ && return; sleep 30; done}那使得命令每30秒运维1遍。

ln –创设链接

ln –创设链接

十四、循环

(1)for循环

for var in list;

do

commands;

done

(2)while循环

while condition

do

   commands;

done

(3)until循环

它会直接循环,直到给定的标准为真。

x=0;

until [ $x -eq 9 ];

do

 let x++; echo $x;

done

 

cat –彰显文件的保有剧情

cat –呈现文件的具有剧情

十五、相比较与测试

1.实战

(1)if条件

if condition;

then

  commands;

fi

(2)else if和else

if condition;

then

  commands;

else if condition; then

  commands;

else

  commands;

fi

(三)算数相比较

l 对变量或值实行算数条件判断:

[ $var -eq 0 ] #当$var等于0时,返回真

[ $var -ne 0 ] #当。。。为非0时,返回真

l -gt:大于

l -lt:小于

l -ge:大于或等于

l -le:小于或等于

(四)字符串相比

行使字符串相比时,最佳用双中括号,因为偶然选用单其中括号会产生错误,所以最棒避开它们。

l [[$str1=$str2]],相等重回真

l [[$str1==$str2]]反省字符串是不是等于的另一种写法

l [[$str1 !=$str2]]假设str一和str二分歧等,则赶回真

l [[$str1 > $str2]]

l [[$str1 < $str2]]

l [[-z $str1]],假设带有的是空字符串,重回真

l [[-n $str]],固然带有的是非空字符串,则赶回真

head –显示文件的头顶

head –展现文件的头顶

tail –展现文件的尾部

tail –显示文件的尾巴部分

less –分屏/分页 彰显文件内容

less –分屏/分页 展现文件内容

dirname –取出目录

dirname –取出目录

basename –取出文件名

basename –取出文件名

history –历史命令

history –历史命令

1、ln

1、ln

# ln -s [目标] [源 — 成立软链接 (symbolic link)

# ln -s [目标] [源 — 创造软链接 (symbolic link)

# ln [目标] [源] — 成立硬链接

# ln [目标] [源] — 创造硬链接

2、cat

2、cat

concatinate,把公文的始末按梯次连接起来,输出到标準输出。如今,只必要简单精晓成展现文件的剧情即可

concatinate,把文件的情节按顺序连接起来,输出到标準输出。近期,只须求不难驾驭成展现文件的内容即可

# cat f一 — 展现文件 f1 的内容到显示器上

# cat f一 — 突显文件 f1 的始末到显示器上

# cat -n f一 — 突显文件的始末,并且增进行号

# cat -n f一 — 展现文件的剧情,并且增进行号

# cat -A f一 — 打字与印刷出一些不可知的字符和职分标记

# cat -A f一 — 打字与印刷出1部分不可知的字符和岗位标记

3、head

3、head

读取文件的头顶

读取文件的头顶

# head -n 三 /etc/passwd –读取文件前边三行

# head -n 叁 /etc/passwd –读取文件前边三行

# head -n -三 /etc/passwd –读取文件时,丢掉文件的后三行;

# head -n -三 /etc/passwd –读取文件时,丢掉文件的后3行;

# head -c 三 /etc/passwd –读取文件的前头五个字节

# head -c 3 /etc/passwd –读取文件的日前多少个字节

# head -c 10m /dev/zero > f一 –创设3个10M的公文

# head -c 10m /dev/zero > f壹 –创制二个拾M的文本

4、tail

4、tail

读取文件的尾部

读取文件的后面部分

# tail -n 叁 /etc/passwd — 读取文件的末尾3行

# tail -n 3 /etc/passwd — 读取文件的后面3行

# tail -c 三 /etc/passwd — 读取文件的末端四个字节

# tail -c 三 /etc/passwd — 读取文件的前边多少个字节

# tail -n +2八 /etc/passwd — 读取文件中从第3八行开端直到最后的保有行

# tail -n +28 /etc/passwd — 读取文件中从第3捌行起初直到最终的富有行

# tail -f /etc/passwd — 跟踪文件尾巴部分内容的成形,常用观望日志文件的成形

# tail -f /etc/passwd — 跟踪文件尾巴部分内容的变动,常用观看日志文件的更动

5、history

5、history

# set -o history –启用命令历史作用 ,暗中认可记录在文书 ~/.bash_history 中

# set -o history –启用命令历史意义 ,暗许记录在文件 ~/.bash_history 中

# set +o history –关闭命令历史功效

# set +o history –关闭命令历史作用

# history –呈现近年来n条历史命令

# history –呈现近年来n条历史命令

注:以下多少个变量用于控制命令历史的多寡,以及是不是记录时间戳

注:以下三个变量用于控制命令历史的数码,以及是或不是记录时间戳

# vim /etc/bashrc –1般布置在该文件个中,用户级可布置在 ~/.bashrc

# vim /etc/bashrc –一般布署在该公文个中,用户级可陈设在 ~/.bashrc

HISTSIZE=一千000 –最多囤积多少条记下

HISTSIZE=1000000 –最多囤积多少条记下

HISTFILESIZE=2000000 –命令历史文件的最大尺寸

HISTFILESIZE=三千000 –命令历史文件的最大尺寸

HISTTIMEFORMAT='[%Y-%m-%d %H:%M:%S] ‘ –命令历史的大运戳格式

HISTTIMEFORMAT='[%Y-%m-%d %H:%M:%S] ‘ –命令历史的小时戳格式

export HISTSIZE HISTFILESIZE HISTTIMEFO奥迪Q3MAT –把她们定义成环境变量

export HISTSIZE HISTFILESIZE HISTTIMEFORubiconMAT –把她们定义成环境变量

 

 

二、脚本

二、脚本

一、如何履行脚本

一、如何实施脚本

   # vim test.sh

   # vim test.sh

    #!/bin/bash

    #!/bin/bash

  echo ‘hello world’

  echo ‘hello world’

# bash test.sh

# bash test.sh

# bash -x test.sh
–突显脚本执行进程的音信

# bash -x test.sh
–呈现脚本执行进度的消息

# sh test.sh

# sh test.sh

# source test.sh

# source test.sh

# . test.sh

# . test.sh

–上述兼为非标准化准执行脚本,脚本文件能够未有可实施权限;下列为行业内部实行:

–上述兼为非标准化准进行脚本,脚本文件能够未有可进行权限;下列为专业执行:

# head -n 1 test.sh

# head -n 1 test.sh

#!/bin/bash

#!/bin/bash

# chmod a+x test.sh

# chmod a+x test.sh

# ./test.sh

# ./test.sh

可直接将脚本放到 PATH
路径下,直接当命令运行

可径直将脚本放到 PATH
路径下,间接当命令运营

注意:shell 必须以 #!
发轫,读作sha-bang,这八个字符用来标识文件类型,#!
用来告诉系统,这么些文件里的始末将要用钦点的解释器来分解,#!
之后的字符串将会被分解成四个先后,该程序用来表明当前文件。假使未有提供sha-bang那1行,当前
shell
将会自主猜想一个,但结果并不保险和预期一致;所以最佳强烈钦定。./test.sh
的运作流程:

注意:shell 必须以 #!
开始,读作sha-bang,那五个字符用来标识文件类型,#!
用来告诉系统,那几个文件里的内容将要用钦命的解释器来表达,#!
之后的字符串将会被分解成贰个先后,该程序用来诠释当前文件。若是未有提供sha-bang那一行,当前
shell
将会自主猜想多个,但结果并不保障和预期1致;所以最佳强烈钦定。./test.sh
的运作流程:

一、内核读取该脚本,检查文件类型标记,获取解释气得路径;

一、内核读取该脚本,检查文件类型标记,获取解释气得路径;

2、内核运维解释器;

二、内核运转解释器;

三、解释器运维起来后,就开辟脚本文件,解释其执行

三、解释器运转起来后,就开辟脚本文件,解释其进行

linux
自带的好多解释器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk

linux
自带的浩大解释器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk

2、4则运算符

二、肆则运算符

    • * /
    • * /

$(()) $[] expr let

$(()) $[] expr let

# echo $((38%5)) –取余

# echo $((38%5)) –取余

# echo $[38/5] –求商

# echo $[38/5] –求商

# echo $((10**2)) –10的平方

# echo $((10**2)) –10的平方

2.1、expr

2.1、expr

# expr 14 % 9 –取余

# expr 14 % 9 –取余

# expr 34 / 9 –求商

# expr 34 / 9 –求商

# expr 30 \* 叁 –使用乘号时,必须用反斜线屏蔽其特定含义

# expr 30 \* 3 –使用乘号时,必须用反斜线屏蔽其一定含义

# expr index “sarasara” a –抓取第二个字符数字串出现的职位

# expr index “sarasara” a –抓取第二个字符数字串出现的任务

# expr substr “this is a test” 叁 5 –抓取字串

# expr substr “this is a test” 3 5 –抓取字串

# expr length “this is a test” –总括字串长度

# expr length “this is a test” –总计字串长度

2.2、let

2.2、let

let总括工具用于实施三个或多少个表明式,变量总结中不须求添加 $
来代表变量。如若表达式中带有了空格或其余特殊字符,则必须引起来

let计算工具用于实践叁个或三个表明式,变量总计中不须求丰裕 $
来表示变量。要是表明式中包涵了空格或任何特殊字符,则必须引起来

# no=20

# no=20

# let no++ –自增

# let no++ –自增

# let no– –自减

# let no– –自减

# let no+=10 –自增10

# let no+=10 –自增10

# let no=no+10 –同上

# let no=no+10 –同上

# let no-=15 –自减15

# let no-=15 –自减15

# let a=5+4 –变了a无须加 $ 符号

# let a=5+4 –变了a无须加 $ 符号

# echo $a

# echo $a

三、shell配置文件

3、shell配置文件

/etc/profile –全局配置文件,

/etc/profile –全局配置文件,

/etc/bashrc –全局配置文件,一般用来定义环境变了

/etc/bashrc –全局配置文件,1般用来定义环境变了

~/.bash_profile –用户配置文件

~/.bash_profile –用户配置文件

~/.bashrc –用户配置文件

~/.bashrc –用户配置文件

~/.bash_logout –用户配置文件,login shell 退出时会读取该公文

~/.bash_logout –用户配置文件,login shell 退出时会读取该文件

4、shell种类

4、shell种类

遵照shell 的开发银行方式差异,能够大致地把shell分为以下两种:

依照shell 的开发银行格局区别,能够大约地把shell分为以下三种:

login shell –在文本界面登录,如su
-;读取shell配置文件相继如下:

login shell –在文本界面登录,如su
-;读取shell配置文件相继如下:

/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc

/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc

interactive shell –gnome-terminal
中默许的shell;读取shell配置文件相继如下:

interactive shell –gnome-terminal
中私下认可的shell;读取shell配置文件相继如下:

~/.bashrc —— /etc/bashrc

~/.bashrc —— /etc/bashrc

non-interactive shell
–用来运营脚本的shell

non-interactive shell
–用来运作脚本的shell

 

 

4.1、在~/.bashrc 中装置一个变量 v,须要该变量只现身在交互shell中

4.1、在~/.bashrc 中设置1个变量 v,必要该变量只现出在相互shell中

# vim ~/.bash_profile –标识shell 是还是不是登录shell

# vim ~/.bash_profile –标识shell 是不是登录shell

LOGINSHELL=1

LOGINSHELL=1

# vim ~/.bashrc –不是登录shell 时,才设置变量

# vim ~/.bashrc –不是登录shell 时,才设置变量

if [ “$LOGINSHELL” != 1 ];then

if [ “$LOGINSHELL” != 1 ];then

v=”interactive shell only”

v=”interactive shell only”

fi

fi

5、命令优先级

5、命令优先级

外号 > 函数 > 内部命令 > 外部命令

外号 > 函数 > 内部命令 > 外部命令

6、shell特殊字符

陆、shell特殊字符

对此shell来说,有个别字符除了它自个儿的意义之外,还有尤其的意思,假如要在字符串中含有特殊字符,就非得透过引用(quoting)的法子来去除特殊字符的奇特含义。以下列出的是1对特殊字符:

对于shell来说,某个字符除了它本人的意义之外,还有独特的意思,即便要在字符串中含有特殊字符,就务须透过引用(quoting)的不二秘籍来去除特殊字符的不相同平时意义。以下列出的是有些特殊字符:

~ –不被引用的话将会被shell
替换立室目录

~ –不被引用的话将会被shell
替换立室目录

& –把程序嵌入后台执行

& –把程序嵌入后台执行

$ –dollar 符,可用来参数进行

$ –dollar 符,可用于参数实行

${}
–变量处理,可对变量的内容做替换,删除,抽取等操作

${}
–变量处理,可对变量的情节做替换,删除,抽取等操作

* –星号,通配符,相配全部字符

* –星号,通配符,相配全体字符

?
–问号,通配符,相称任意三个字符

?
–问号,通配符,相配任意三个字符

() –命令组

() –命令组

{} –命令组

{} –命令组

“”
–双引号,引用符号;能够去除超越50%特殊字符的特种意义,除 $;`;!;\

“”
–双引号,引用符号;能够去除大多数特殊字符的分化日常意义,除 $;`;!;\


–单引号,引用符号;能够去除全体特殊字符的异样意义,除自个儿作者


–单引号,引用符号;能够去除全体特殊字符的优秀意义,除本人作者

.
–约等于source命令;可用来安装隐藏文件;用于目录名时,代表当前目录

.
–也正是source命令;可用以安装隐藏文件;用于目录名时,代表当前目录

/ –斜杠,路径分隔符,根目录

/ –斜杠,路径分隔符,根目录

\
–反斜杠,可用来去除单个字符的尤其意义,也正是所谓的“转义“,也可用于表示特殊字符,如换行符
(\n)

\
–反斜杠,可用来去除单个字符的奇特含义,也正是所谓的“转义“,也可用以表示特殊字符,如换行符
(\n)


–反撇号,命令优先实施,和$()含义是相同的;假诺有嵌套那么不能够用“号


–反撇号,命令优先执行,和$()含义是一律的;假诺有嵌套那么不可能用“号

$(())和 $[] –运算符

$(())和 $[] –运算符

: –空命令

: –空命令

;
–命令分割;不去思虑上一条命令所实行的结果

;
–命令分割;不去思量上一条命令所进行的结果

;; –case 选项的截止符

;; –case 选项的甘休符

# –注释

# –注释

&&
–逻辑与;可对命令举办剪切;不过急需思考上一条命令所进行的结果

&&
–逻辑与;可对命令进行剪切;但是急需考虑上一条命令所实行的结果

||
–逻辑或;可对命令进行剪切;不必要思量上一条命令执行结果

||
–逻辑或;可对命令实行剪切;不供给思考上一条命令执行结果



# echo ‘hello world;’ “hello world;” hello\ world;
–用三种引用符合去除空格的出格意义

# echo ‘hello world;’ “hello world;” hello\ world;
–用二种引用符合去除空格的特种含义

 

 

三、变量

三、变量

一、本地变量

壹、当地变量

当前用户自定义的变量;当前进度有效,其余进度也许当前经过的子进度无效

时下用户自定义的变量;当前进度有效,其他进度也许当前经过的子进度无效

# a=123

# a=123

# echo $a

# echo $a

# unset a –撤除变了定义

# unset a –撤废变了定义

二、环境变量

二、环境变量

此时此刻经过有效,并且能被子进度调用;

眼下进程有效,并且能被子进度调用;

# env –查看当前系统全体环境变量

# env –查看当前系统具备环境变量

# set –查看当前系统全数环境变量和一时变量

# set –查看当前系统有着环境变量和一时半刻变量

# echo $PATH — 展现PATH变量的情节

# echo $PATH — 彰显PATH变量的剧情

# export hi=hello –定义环境变量;工作中间1般喜欢把即用的环境变了写在
~/.bash_profile

# export hi=hello –定义环境变量;工作个中一般喜欢把即用的环境变了写在
~/.bash_profile

多少个广大环境变量:

多少个周边环境变量:

PATH –影响命令的摸索

PATH –影响命令的搜寻

PS一 –命令提醒符

PS一 –命令提示符

TMOUT –超时时间,单位为S,时间壹到,自动退出 interactive shell
;所以最棒将其设为只读变量 # declare -r
TMOUT=60

TMOUT –超时时间,单位为S,时间1到,自动退出 interactive shell
;所以最佳将其设为只读变量 # declare -r
TMOUT=60

HISTSIZE, HISTFILESIZE, HISTTIMEFO奇骏MAT –命令历史

HISTSIZE, HISTFILESIZE, HISTTIMEFOTiguanMAT –命令历史

 

 

三、系统变量

三、系统变量

又叫bash中放置的变量;shell本身已经固定好的片段变量

又叫bash中放置的变量;shell自身已经定位好的壹些变量

$# –脚本前边接参数个数

$# –脚本前边接参数个数

$* –脚本后边全体的参数(被双引号包蕴则被当成贰个字符串输出)

$* –脚本前面全部的参数(被双引号包罗则被当成3个字符串输出)

$@ –脚本前面全数的参数(被双引号包罗依然封存各参数的分界)

$@ –脚本前面全数的参数(被双引号包涵照旧保留各参数的边界)

$? –上一条命令执行后赶回的景况

$? –上一条命令执行后归来的情事

$$ –当前经过的进度号

$$ –当前进程的历程号

$! –后台运维的末段二个历程号

$! –后台运维的末梢2个进程号

!$ –最终一条命令或参数

!$ –最终一条命令或参数

!! –最终一条命令的历史记录

!! –最终一条命令的历史记录

$0 –当前程序的先后名或进度

$0 –当前程序的次序名或进度

$1~$n –地点参数变量

$1~$n –地点参数变量

#!/bin/bash

#!/bin/bash

echo “\$0 = $0”

echo “\$0 = $0”

echo “\$# = $#”

echo “\$# = $#”

echo “\$* = $*”

echo “\$* = $*”

echo “\$1 = $2”

echo “\$1 = $2”

echo “\$7 = $7”

echo “\$7 = $7”

echo “\$11 = ${11}”

echo “\$11 = ${11}”

# chmod a+x test.sh

# chmod a+x test.sh

# ./test.sh a b c

# ./test.sh a b c

四、变量定义

肆、变量定义

a、暗中同意下,变量类型没啥要求。能够给变量赋任何值,可是等号两边不能够有别的的空格

a、默许下,变量类型没啥需要。能够给变量赋任何值,可是等号两边不能够有其余的空格

b、变量名区分轻重缓急写

b、变量名区分轻重缓急写

c、变量名不可能以数字照旧特殊符号开首

c、变量名无法以数字依旧特殊符号起始

d、将指令所执行的结果保存到变量

d、将下令所实行的结果保存到变量

5、调用变量

伍、调用变量

# a=$(hostname)

# a=$(hostname)

# A=123456789

# A=123456789

# echo $A

# echo $A

# echo ${A:2:3}

# echo ${A:2:3}

6、数组

6、数组

数组的定义:用小括号扩起来定义数组,括号里的要素用空格隔开

数组的定义:用小括号扩起来定义数组,括号里的成分用空格隔断

# array[0]=var1

# array[0]=var1

# array[1]=var2

# array[1]=var2

# array[2]=var3

# array[2]=var3

# array=(var一 var贰 var叁) –等同于上述叁行,定义数组

# array=(var1 var2 var3) –等同于上述3行,定义数组

# echo ${array[0]} –取数组第一个值

# echo ${array[0]} –取数组第3个值

# echo ${array[*]} –取数组全部值

# echo ${array[*]} –取数组全体值

# echo ${array[@]} –同上

# echo ${array[@]} –同上

柒、declare 定义有档次的变量

七、declare 定义有品种的变量

-i –将变量看成整数

-i –将变量看成整数

-r –定义只读变量

-r –定义只读变量

-x –将变量导出到环境变量

-x –将变量导出到环境变量

-a –将变量看成数组

-a –将变量看成数组

⑧、read 交互式定义变量

八、read 交互式定义变量

-p –提醒信息

-p –提醒音信

-n –字符数

-n –字符数

-t –超时

-t –超时

-s –不显示

-s –不显示

 

 

四、別名

四、別名

命令的別名,顾名思义,便是足以通过別的名字来执行命令。平日用于简化命令的输入,只怕为命令扩充1些参数,只怕是单独地为命令添加五个访问名称。

指令的別名,顾名思义,正是足以由此別的名字来执行命令。日常用于简化命令的输入,只怕为命令扩展1些参数,可能是然则地为命令添加八个访问名称。

# alias cp mv rm –查看cp, mv, rm那多少个指令是还是不是別名

# alias cp mv rm –查看cp, mv, rm那多少个指令是或不是別名

# unalias rm — 删除却号 rm

# unalias rm — 删除此而外号 rm

# alias cdyum=’cd /data/yum’ — 简化输入

# alias cdyum=’cd /data/yum’ — 简化输入

# alias rm=’rm -i’ — 为命令扩展参数

# alias rm=’rm -i’ — 为命令扩大参数

— 常常別名是在配备文件~/.bashrc 中安装的

— 平时別名是在布署文件~/.bashrc 中装置的

一、验证外号、函数、内部命令、外部命令的先行级别

一、验证小名、函数、内部命令、外部命令的预先级别

# alias pwd=’echo it is an alias’ –创立二个 pwd 外号

# alias pwd=’echo it is an alias’ –创建1个 pwd 小名

# function pwd() { echo “this is a function”; } –成立一个 pwd 函数

# function pwd() { echo “this is a function”; } –成立三个 pwd 函数

# pwd –运转pwd,发现输出是小名

# pwd –运维pwd,发现输出是外号

# unalias pwd –删除此而外号,再运维 pwd,发现输出是函数内容

# unalias pwd –删除却号,再运转 pwd,发现输出是函数内容

# unset pwd –删除函数,再运营 pwd,才是出口当前所在路子

# unset pwd –删除函数,再运维 pwd,才是出口当前所在路线

因而:外号 > 函数 > 内部命令 >
外部命令

从而:别称 > 函数 > 内部命令 >
外部命令

 

 

5、条件判断

伍、条件判断

# vim test

# vim test



if [ 条件 ];then

if [ 条件 ];then

command…

command…

fi

fi



if [ 条件 ];then

if [ 条件 ];then

command…

command…

else

else

command…

command…

fi

fi



if [ 条件1 ];then

if [ 条件1 ];then

command1…

command1…

elif [ 条件2 ];then

elif [ 条件2 ];then

command2…

command2…

else

else

command3…

command3…

fi

fi



if [ 条件1 ];then

if [ 条件1 ];then

command1…

command1…

if [ 条件2 ];then

if [ 条件2 ];then

command2…

command2…

fi

fi

else

else

if [ 条件3 ];then

if [ 条件3 ];then

command3…

command3…

elif [ 条件4 ];then

elif [ 条件4 ];then

command4…

command4…

else

else

command5…

command5…

fi

fi

fi

fi

 

 

六、test判断

六、test判断

test == [ judge
]

test == [ judge
]

1、文件存在与否的论断

一、文件存在与否的判定

# vim test.sh

# vim test.sh

#!/bin/bash

#!/bin/bash

if test -e $一;then –是还是不是存在;还有 -p;-c;-b;-L

if test -e $一;then –是不是留存;还有 -p;-c;-b;-L

if [ -f $1
];then –使用 [ judge ]
替换

if [ -f $1
];then –使用 [ judge ]
替换

if test -f $1;then
–是不是留存并且为普通文书

if test -f $一;then
–是还是不是存在并且为平日文书

if test -d $1;then
–是不是存在并且为目录

if test -d $一;then
–是不是留存并且为目录

if test -S $一;then
–是还是不是留存并且套接字文件

if test -S $1;then
–是还是不是留存并且套接字文件

echo ‘YES’

echo ‘YES’

fi

fi

# chmod a+x test.sh

# chmod a+x test.sh

# ./test.sh [path]

# ./test.sh [path]

二、文件权限相关判断

二、文件权限相关判断

-r;-w;-x –是不是有读,写,执行权限

-r;-w;-x –是不是有读,写,执行权限

-u –是否有suid

-u –是否有suid

-g –是否有sgid

-g –是否有sgid

-k –是否有t位

-k –是否有t位

-s –是或不是为空白文件,-s代表非空;! -s 空文件

-s –是不是为空白文件,-s表示非空;! -s 空文件

3、字符串判断

三、字符串判断

= –等于则为真,等于号两边必须有空格;也可以是:==

= –等于则为真,等于号两边必须有空格;也能够是:==

!= –不对等则为真

!= –不对等则为真

-z 字符串 –字符串的尺寸为零则为真

-z 字符串 –字符串的长度为零则为真

-n 字符串 –字符串的长短不为零则为真

-n 字符串 –字符串的长短不为零则为真

if test $num1 = $num2;then

if test $num1 = $num2;then

if [ $num1 = $num2 ];then

if [ $num1 = $num2 ];then

if [ -n $num1 ];then

if [ -n $num1 ];then

四、数值判断

四、数值判断

-eq –等于则为真

-eq –等于则为真

-ne –不等于则为真

-ne –不等于则为真

-gt –大于则为真

-gt –大于则为真

-ge –大于等于则为真

-ge –大于等于则为真

-lt –小于则为真

-lt –小于则为真

-le –小于等于则为真

-le –小于等于则为真

if test $[num1] -eq
$[num2];then

if test $[num1] -eq
$[num2];then

if [ $[num1] -eq $[num2]
];then

if [ $[num1] -eq $[num2]
];then

伍、逻辑判断

伍、逻辑判断

-a 和 && –逻辑与

-a 和 && –逻辑与

-o 和 || –逻辑或

-o 和 || –逻辑或

! –非

! –非

优先级:与>或>非

优先级:与>或>非

if test -e $一 -o -e $二;then
–判断是或不是有三个文本存在

if test -e $一 -o -e $二;then
–判断是或不是有2个文本存在

if [ -e $1 -o -e $2 ];then –同上

if [ -e $1 -o -e $2 ];then –同上

if test ! -e $1 -o ! -e $2;then –判断四个文本并未有同时存在

if test ! -e $1 -o ! -e $二;then –判断八个文本未有同时设有

if [ ! -e $1 -o ! -e $2 ];then –同上

if [ ! -e $1 -o ! -e $2 ];then –同上

 

 

相关文章