1、shell概念
  shell是二个用C语音编写的次序,他是用户使用Linux的桥梁
  shell既是一种命令语音,又是一种程序设计语音
  shell是指一种应用程序,那一个应用程序提供1个界面,用户通过那一个界面访问操作系统内核的劳务

shell
一直在用,不过尚未系统的学习过。趁本次时机,整理下。复习下,也学习下。

Shell 是壹个用 C 语言编写的主次,它是用户采取 Linux 的桥梁.Shell
既是一种命令语言,又是一种程序设计语言.

一、规范

2、shell脚本
  shell脚本全称是shell script,是一种为shell编写的剧本程序
  Ken 汤普森的sh是首先种Unix Shell

shell 是什么?

Shell 是3个用 C 语言编写的顺序,它是用户使用 Linux 的桥梁。Shell
既是一种命令语言,又是一种程序设计语言。
Shell
是指一种应用程序,那些应用程序提供了三个界面,用户通过那么些界面访问操作系统内核的服务。

Shell脚本

Shell 脚本(shell script),是一种为 shell 编写的本子程序。
产业界所说的 shell 平时都是指 shell 脚本,但大家应有要精通,shell 和 shell
script 是八个分化的定义。
出于习惯的案由,简洁起见,本文出现的 “shell编制程序” 都以指 shell
脚本编制程序,不是指开发 shell 本人.

Linux的Shell连串众多,常见的有:Bourne
Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C
Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for
Root(/sbin/sh),等等。分裂的Shell语言的语法有所分化,所以不能交流使用。每个Shell都有其性状之处,基本上,通晓当中任何一种
就丰盛了。在本文中,大家关心的重庆大学是Bash,也正是Bourne Again
Shell,由于易用和免费,Bash在平凡工作中被大面积采纳;同时,Bash也是大部分Linux系统私下认可的Shell。在相似意况下,人们并不区分
Bourne Shell和Bourne Again
Shell,所以,在上面包车型地铁文字中,我们能够见见#!/bin/sh,它一样也得以改为#!/bin/bash。

3、shell环境
  shell编制程序只要有多少个能编写代码的文本编辑器和三个能诠释实施的本子解释器
  Linux中广大的shell类别有:
  Bourne Shell(/usr/bin/sh或/bin/sh)
  Bourne Again Shell(/bin/bash)
    易用和免费,Bash在平时工作中被大规模运用
    Bash是大部分Linux系统默许的shell
  C shell(/usr/bin/csh)
  K shell(/usr/bin/ksh)
  Shell for Root(/sbin/sh)

shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的台本程序。
产业界所说的 shell 日常都是指 shell 脚本,但读者朋友要了解,shell 和 shell
script 是多个例外的定义。
鉴于习惯的缘由,简洁起见,本文出现的 “shell编制程序” 都以指 shell
脚本编程,不是指开发 shell 自个儿。

Shell环境

Shell 编制程序跟 java、php
编制程序一样,只要有2个能编写代码的公文编辑器和一个能诠释实施的剧本解释器就能够了。
Linux 的 Shell 连串众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……
    我们平时关心的是 Bash,也正是 Bourne Again
    Shell,由于易用和免费,Bash 在一般工作中被广大利用。同时,Bash
    也是大部分Linux 系统暗中同意的 Shell。
    在一般景色下,人们并不区分 Bourne Shell 和 Bourne Again
    Shell,所以,像 #!/bin/sh,它一律也能够改为 #!/bin/bash。
    #! 告诉系统其后路径所钦定的次序正是解释此脚本文件的 Shell 程序。

使用vi等公事编辑器编写Shell脚本的格式是永恒的,如下:

  一般意况下,人们并不区分 Bourne Shell 和 Bourne Again
Shell,所以,像 #!/bin/sh,它同样也能够改为 #!/bin/bash

Shell 环境

Shell 编制程序跟 java、php
编制程序一样,只要有一个能编写代码的公文编辑器和多个能诠释实施的剧本解释器就能够了。
Linux 的 Shell 系列众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
因为做事的关联,我关切的是 Bash,也正是 Bourne Again Shell。

Shell语言的”Hello World”

用vim成立二个test.sh文件, 里面包车型客车代码如下

#!/bin/bash
echo "Hello world!"

chmod +x ./test.sh 给test.sh文件添加可举办权限
./test.sh 执行test.sh 显示 “Hello world!”
#!是三个约定的记号,它报告系统那么些剧本供给什么解释器来推行,即使用哪一种Shell。
echo 命令用于向窗口输出文本。
注意,一定要写成 ./test.sh,而不是
test.sh,运维别的二进制的主次也一律,直接写 test.sh,linux 系统会去
PATH 里摸索有没有叫 test.sh 的,而只有
/bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录常常不在
PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh
告诉系统说,就在当前目录找。

/bin/sh test.sh
/bin/php test.php

那种办法运转的本子,不必要在率先行内定解释器音信,写了也没用
本文参考
这里

#!/bin/sh

4、shell作用
  将众多指令写在一起,让用户急忙执行二个文书的shell脚本,即贰回实践多少个指令

shell怎样进行用户的授命

shell有二种实施命令的点子。
率先种办法是用户优先编写3个sh脚本文件,而后使用实行该脚本,那种艺术,大家习惯称为shell编制程序。
例如:

    echo “hello world”

其次种方式,则是用户一直在shell界面上实行shell命令,由于shell界面包车型大巴涉及,我们都习惯一行行的书写,很少写出总体的主次来共同实施,所以也称命令行。
例如:
编写如下脚本

    vim hello.sh
    #!/bin/bash
     echo “hello world”

接下来实施

    sh hello.sh

要么,赋予执行权限,然后直接运维。

    chmod +x hello.sh
    ./hello.sh

#comments

5、bash环境
  .bash_profile
    设置环境变量
    账户第叁建工公司立就存在

Reference

  1. Shell脚本编写规范。Shell 教程
    http://www.runoob.com/linux/linux-shell.html
  2. http://www.cnblogs.com/tjudzj/p/7088543.html

Your commands go here

  .bashrc
    存放针对bash的指令
    每回运行都履行
    在.bash_profile之后执行

首行中的符号#!告诉系统其后路径所内定的顺序就是解释此脚本文件的Shell程
序。假设首行没有那句话,在实施脚本文件的时候,将会油然则生谬误。后续的一对正是主程序,Shell脚本像高级语言一样,也有变量赋值,也有决定语句。除第三行外,以#先导的行正是注释行,直到此行的终止。假设一行未到位,能够在行尾加上”,这几个符号申明下一行与此行会联合为同一行。

  .bash_logout
    仅在剥离注册时运维

编写制定完成,将脚本存盘为filename.sh,文件名后缀sh评释那是叁个Bash脚本文件。执行脚本的时候,要先将脚本文件的性质改为可实施的:

  .bash_histroy
    历史记录

chmod +x filename.sh

6、格式
  格式:vi filename.sh    使用vi来编写shell脚本
  脚本第①行格式:#!/bin/bash
    符号#!用来钦赐该脚本文件的剖析程序。当编辑好脚本后,执行脚本还非得采用其颇具可实施属性,即:chmod+x
filename然后执行./filename.sh
    第二种实施措施:/bin/bash filename.sh

履行脚本的办法是:

七 、注意事项
  chmod+x file加上实施权限,不然会唤醒无履行权限
  执行脚本时或全目录,或,./file.sh,假使不加的话,linux暗中认可会从PATH中查找file.sh
  脚本后缀名修改后,还是可以平时运营

./filename.sh

二、Shell的基本知识**

与别的语言分裂,Shell
Script中if语句的标准部分要以分号来分隔。第①行中的[]意味着原则测试,常用的规则测试有下边两种:

[ -f “$file” ] 判断$file是不是是一个文件

[ $a -lt 3 ] 判断$a的值是不是低于3,同样-gt和-le分别表示大于或低于等于

[ -x “$file” ] 判断$file是还是不是留存且有可实施权限,同样-r测试文件可读性

[ -n “$a” ] 判断变量$a是或不是有值,测试空串用-z

[ “$a” = “$b” ] 判断$a和$b的取值是不是等于

[ cond1 -a cond2 ]
判断cond1和cond2是或不是还要创设,-o代表cond1和cond2有一赤手空拳

要留心尺度测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等标志两侧同样也有空格。如若没有这么些空格,Shell解释脚本的时候就会出错。

 

      Linux中bash shell语音保留的严重性字:

case

elif

let

clear

else

read

continue

if

then

echo

for in

while

 

 

2.1. shell升迁符及其环境

提示符:$

环境:Linux,Unix,Dos等等

?
Shell其实正是二个诠释执行命令的程序,所谓shell编制程序其实正是用自然的语法将各个基本的授命组合起来,让shell程序去解释施行。

同古板的编程语言同样,shell提供了无数特色,这一个特征能够使您的shell
script编制程序更为实惠,如:数据变量、参数传递、判断、流程序控制制、数据输入和出口,子程序及以中止处理等。

2.2 如何执行shell程序

Shell程序(***.sh)

? 执行那一个命令时

(1) #./***.sh

(2) #chmod u+x ***.sh

#***.sh

(3) #sh ***.sh

2.3 常量

? 字符串,例如“Hello World!”。

? 数字,例如705,23。

 

2.4 变量

shell编制程序中它们是没有项目标,简称弱类型编制程序语言,在那一个变量中得以保含四个数字,贰个字符串,贰个单词等。你并不要求声明那个变量,它会在引用那几个变量时创制它。

STR=”Hello World!”

echo $STR

  HOME=”/home”                //注意赋值不要有空格

  a=123

  HOME_LIST=$(ls /home) //把命令的履行结果赋值给变量

  ehco $HOME                   //$ 符号是获得变量HOME的值

  a=a+1

系统变量:

  $0 这一个程序的履行名字

  $n  那个顺序的第n个参数值,n=1…9

  $*  那么些顺序的富有参数

  $# 那个顺序的参数个数

  $$ 这一个顺序的PID

  $! 执行上一个背景指令的PID

     $? 上三个命令的再次来到值

2.5 局地变量

     
局地变量一般是指写在函数中的变量,他的活力是零星的。局地变量相比较好领会,这里就不再多介绍了。

2.6 从键盘输入变量值

使用read命令

read var1 var2 … varn

2.7 注释

?Shell编程中的注释以#开头

2.8 数字运算

主尽管指整数运算。expr命令能够将字符型变量转换为整数实行操作

语法:expr integer operator integer

其中operator为+ – * / %, 但对*的选用要用转义符/,如:

[oracle@localhost ~]$ more dvd.sh

#!/bin/bash

expr 5 /* 5

[oracle@localhost ~]$ sh dvd.sh

25

2.9 逻辑运算

test实行逻辑运算,用[ ]括起来就是test运算

int1 -eq int2 相等?

int1 -ne int2 不等?

int1 -gt int2 int1 > int2 ?

int1 -ge int2 int1 >= int2 ?

int1 -lt int2 int1 < int2 ?

int1 -le int2 int1 <= int2

2.10 双引号及单引号

?$echo “$HOME $PATH”  — 展现变量值

/home/hbwork opt/kde/bin:/usr/local/bin:

 $echo ‘$HOME $PATH’  — 展现单引号里的内容

$HOME $PATH

2.11 空格

由于shell对命令中的多余的空格不作任何处理
,而用引号括起来则能够防备shell去掉这几个空格。

$ str1=abcd

$ str2=”abcd “

2.12 分支结构

2.12.1 结构一

if [ variable = value ]

then

command

else

if [澳门金沙国际 , variable = value ]

then

command

else

command

fi

2.12.2 结构二

if [ variable = value ]

then

command

elif [ variable = value ]

then

command

fi

if 语句示例:

if [ “22” -lt “33” ]   then   //注意空格

  echo “22 less than 33”

  else

  echo “no”

fi                                  //if语句的完毕

2.13 Case语句

case value in

pattern1)

command;;

pattern2)

command;;

patternn)

command;

esac

 

case 示例:

 

  echo “enter a number”

  read ans                    //读取3个变量read

  case $ans in

  1)

  echo   “you numer is $ans”

  ;;                                //注意符号是七个 ;

  2)

  echo “you number is 2”

  ;;

  [3-9])

  echo “you number is $ans”

  ;;

  *)                                   //*通配符

  echo “others”

esac

 

2.14 And 和 Or

command1 && command2

? command1 || command2

 

2.15 循环语句

2.15.1 For循环

for var in arg1 arg2 … argn

do

command

….

command

done

 

 

For循环示例

int=1

for $int in 1 2 3 4 5

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

 

2.15.2 while循环

 

while command

do

command

command

command

Done

While循环的演示

int=1

while [ $int -le 5 ]

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

2.15.3 until循环结构

until command

do

command

command

….

command

done

 

Until循环示例

? int=1

until [ $int -gt 5 ]

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

 

2.16 从循环中剥离: break和continue命令

break 马上退出循环

continue 忽略本循环中的其他命令,继续下一下循环往复

 

2.17 函数 (子过程)

funcname()

{

command

command; #分号

}

 

 

函数示例

setup ()

{ command list ; }

do_data ()

{ command list ; }

setup

do_data

 

2.18  shell程序的调节

? 使用-x举行跟踪执行,执行并浮现每一条指令。

 

 

2.19 相比运算符

 

2.19.1 文件比较运算符

  -e filename        如果 filename 存在,则为真            [ -e
/var/log/syslog ]

  -d filename       如果 filename 为目录,则为真       [ -d
/tmp/mydir ]

  -f filename        就算 filename 为健康文件,则为真 [ -f
/usr/bin/grep ]

  -L filename        假如 filename 为标志链接,则为真   [ -L
/usr/bin/grep ]

  -r filename          如果 filename 可读,则为真              [ -r
/var/log/syslog ]

  -w filename        如果 filename 可写,则为真            [ -w
/var/mytmp.txt ]

  -x filename         如果 filename 可执行,则为真           [ -L
/usr/bin/grep ]

 

  filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [
/tmp/install/etc/services -nt /etc/services ]

  filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [
/boot/bzImage -ot arch/i386/boot/bzImage ]

 

2.19.2 字符串相比较运算符 (请小心引号的采纳,那是防备空格骚扰代码的好办法)

  -z string               若是 string 长度为零,则为真          [ -z
“$myvar” ]

  -n string              若是 string 长度非零,则为真               [
-n “$myvar” ]

  string1 = string2 如果 string1 与 string2 相同,则为真 [ “$myvar” =
“one two three” ]

  string1 != string2 如果 string1 与 string2 不同,则为真 [ “$myvar”
!= “one two three” ]

  

2.19.3 算术相比运算符

  num1 -eq num2                 等于                            [ 3
-eq $mynum ]

  num1 -ne num2                不等于                         [ 3 -ne
$mynum ]

  num1 -lt num2                    小于                            [
3 -lt $mynum ]

  num1 -le num2              小于或等于                       [ 3 -le
$mynum ]

  num1 -gt num2                    大于                            [
3 -gt $mynum ]

  num1 -ge num2               大于或等于                     [ 3 -ge
$mynum ]

 

三、实例

#/bin/sh
filename=`date +%Y%m%d%H%I%M`
mysqldump -uroot -p560e25cafb test>/home/mysql/test$filename.sql  
//备份数据库

#/bin/sh
echo “this is mailtest” | mail -s “hello” 42975647xx@qq.com  //发送邮件

 

四. Shell 的有的注意事项

 

3.1. 基础

  #!/bin/bash   //bash脚本第叁句都以以此,他会让系统钦点以bash来分解那一个剧本

#                 //shell脚本注释符号

 

3.2. 变量

变量赋值的时候”=”两边的始末要紧靠”=”

譬如说:sum=0,写java写的日子长了总喜欢写成sum =
0,不过那样的结果是编辑器不识别

3.3. 在应用if、while时,在注意变量与符号之间的剪切

例如:if [ `expr $a % 3` -ne 0 ],while [ “$var” != “end”
],尽量分开写,那样也挺难堪也利于识别。

 

3.4.  let的意趣是让”=”前面的情节做算术运算,例如:let x=a-b

 

3.5. 超越二分之一意况下,能够运用测试命令来对标准举行测试,比如能够相比字符串、判断文件是或不是存在及是还是不是可读等等……平常用”
[ ] “来代表原则测试,注意这里的空格很关键,要力保方括号前后的空格。

 

[ -f “somefile” ] :判断是或不是是一个文本

[ -x “/bin/ls” ] :判断/bin/ls是或不是留存并有可实施权限

[ -n “$var” ] :判断$var变量是还是不是有值

[ “$a” = “$b” ] :判断$a和$b是还是不是等于

 

3.6 多少个简易例子

  for filename in $(ls)

  do

  cat $filename

  done

 

 

  for((i=0; i<10; i++))

  do

  echo $i

  done

 

  x=1

  sum=0

  while [ $x -le 10 ]  //注意[ ] 两边的空格

  do

  let sum=sum+$x   //shell中算术计算使用let

  let x=x+1

  done

  echo $sum

 

相关文章