shell既是一种命令语音,本文出现的 "shell编

作者: 操作系统  发布:2019-11-22

  .bash_logout
    仅在退出注册时运行

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脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但我们应该要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身.

then

6、格式
  格式:vi filename.sh    使用vi来编写shell脚本
  脚本第一行格式:#!/bin/bash
    符号#!用来指定该脚本文件的解析程序。当编辑好脚本后,执行脚本还必须使用其具有可执行属性,即:chmod+x filename然后执行./filename.sh
    第二种执行方法:/bin/bash filename.sh

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

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用
本文参考 这里

[ "$a" = "$b" ] 判断$a和$b的取值是否相等

7、注意事项
  chmod+x file加上执行权限,否则会提示无执行权限
  执行脚本时或全目录,或,./file.sh,如果不加的话,linux默认会从PATH中查找file.sh
  脚本后缀名修改后,仍然可以正常运行

shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。

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,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
    在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
    #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

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

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有两种执行指令的方式。
第一种方法是用户事先编写一个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

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

? int=1

2、shell脚本
  shell脚本全称是shell script,是一种为shell编写的脚本程序
  Ken Thompson的sh是第一种Unix Shell

Reference

  1. Shell 教程 http://www.runoob.com/linux/linux-shell.html
  2. http://www.cnblogs.com/tjudzj/p/7088543.html

  echo $sum

  .bashrc
    存放针对bash的命令
    每次启动都执行
    在.bash_profile之后执行

shell 是什么?

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

if [ variable = value ]

5、bash环境
  .bash_profile
    设置环境变量
    账户一建立就存在

  ;;

4、shell作用
  将许多命令写在一起,让用户很快执行一个文件的shell脚本,即一次执行多个命令

  $$ 这个程序的PID

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

int1 -gt int2 int1 > int2 ?

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

for var in arg1 arg2 ... argn

  .bash_histroy
    历史记录

2.16 从循环中退出: break和continue命令

? Shell其实就是一个解释执行命令的程序,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。

[oracle@localhost ~]$ more dvd.sh

三、实例

  $# 这个程序的参数个数

fi                                  //if语句的结束

int1 -ge int2 int1 >= int2 ?

2.1. shell提示符及其环境

command

[ -n "$a" ] 判断变量$a是否有值,测试空串用-z

}

...

 

case value in

While循环的示例

int=`expr $int + 1`

函数示例

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

? 使用-x进行跟踪执行,执行并显示每一条指令。

then

until command

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

2.17 函数 (子过程)

使用read命令

 

if 语句示例:

$ str1=abcd

patternn)

  done

{

command

3.5. 大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等……通常用" [ ] "来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。

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

do

2.15.1 For循环

  let x=x+1

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

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

Done

else

一、规范

 

[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

  echo "enter a number"

9159金沙官网, 

  do

  -z string               如果 string 长度为零,则为真          [ -z "$myvar" ]

esac

else

  2)

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

2.15.3 until循环结构

do

例如:if [ `expr $a % 3` -ne 0 ],while [ "$var" != "end" ],尽量分开写,这样也挺好看也便于识别。

done

  #!/bin/bash   //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本

2.12 分支结构

 $echo '$HOME $PATH'  -- 显示单引号里的内容

系统变量:

  echo   "you numer is $ans"

  -n string              如果 string 长度非零,则为真               [ -n "$myvar" ]

  done

  echo "you number is 2"

要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错。

[ -f "somefile" ] :判断是否是一个文件

read var1 var2 … varn

 

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

sq=`expr $int /* $int`

2.19.1 文件比较运算符

pattern1)

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

 

  done

  for filename in $(ls)

  cat $filename

2.15 循环语句

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

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

      Linux中bash shell语音保留的关键字:

pattern2)

2.6 从键盘输入变量值

  echo "you number is $ans"

done

 

2.5 局部变量

  -f filename        如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]

command

done

  case $ans in

[oracle@localhost ~]$ sh dvd.sh

[ -n "$var" ] :判断$var变量是否有值

command

command

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

     $? 上一个指令的返回值

command;

 

do_data ()

fi

? command1 || command2

command

{ command list ; }

if [ variable = value ]

? 数字,例如705,23。

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

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

then

 

? 执行这个命令时

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

  [3-9])

break 立即退出循环

command

 

 

funcname()

例如:sum=0,写java写的时间长了总喜欢写成sum = 0,但是这样的结果是编辑器不识别

3.4.  let的意思是让"="后面的内容做算术运算,例如:let x=a-b

 

  ;;

  

STR="Hello World!"

case 示例:

  $0 这个程序的执行名字

25

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

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

command

do

3.6 几个简单例子

2.18  shell程序的调试

2.11 空格

 

Your commands go here

3.1. 基础

until [ $int -gt 5 ]

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

sq=`expr $int /* $int`

setup ()

执行脚本的方法是:

int=`expr $int + 1`

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

int1 -ne int2 不等?

2.12.2 结构二

 

 

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

  do

二、Shell的基本知识**

(1) #./***.sh

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

....

echo $sq

  else

?$echo "$HOME $PATH"  -- 显示变量值

int=1

Shell程序(***.sh)

command

  -L filename        如果 filename 为符号链接,则为真   [ -L /usr/bin/grep ]

 

command

while [ $int -le 5 ]

 

...

chmod +x filename.sh

Until循环示例

echo $sq

 

echo $STR

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

  sum=0

 

shell编程中它们是没有类型的,简称弱类型编程语言,在这个变量中可以保含一个数字,一个字符串,一个单词等。你并不需要声明这个变量,它会在引用这个变量时创建它。

command

[ "$a" = "$b" ] :判断$a和$b是否相等

do

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

command;;

command

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

3.3. 在使用if、while时,在注意变量与符号之间的分割

do_data

 

2.7 注释

 

  do

 

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

command; #分号

command

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

do

  1)

变量赋值的时候"="两边的内容要紧靠"="

esac

  $n  这个程序的第n个参数值,n=1...9

环境:Linux,Unix,Dos等等

  echo "no"

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

if [ variable = value ]

编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行的:

then

int=1

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

 

2.15.2 while循环

expr 5 /* 5

  *)                                   //*通配符

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

2.9 逻辑运算

...

2.19 比较运算符

 

2.19.2 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)

由于shell对命令中的多余的空格不作任何处理 ,而用引号括起来则可以防止shell去掉这些空格。

 

done

  a=123

done

command1 && command2

与其他语言不同,Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:

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

[ -f "$file" ] 判断$file是否是一个文件

 

2.10 双引号及单引号

#!/bin/bash

 

#                 //shell脚本注释符号

语法:expr integer operator integer

同传统的编程语言一样,shell提供了很多特性,这些特性可以使你的shell script编程更为有用,如:数据变量、参数传递、判断、流程控制、数据输入和输出,子程序及以中断处理等。

command

./filename.sh

while command

$HOME $PATH

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

  read ans                    //读取一个变量read

2.4 变量

2.12.1 结构一

(3) #sh ***.sh

{ command list ; }

$ str2="abcd "

....

#comments

 

#***.sh

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。

2.2 如何执行shell程序

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

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

 

主要是指整数运算。expr命令可以将字符型变量转换为整数进行操作

#!/bin/sh

提示符:$

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。

elif [ variable = value ]

int1 -lt int2 int1 < int2 ?

2.13 Case语句

setup

  x=1

2.14 And 和 Or

int=`expr $int + 1`

sq=`expr $int /* $int`

case

elif

let

clear

else

read

continue

if

then

echo

for in

while

 

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

  echo "others"

  echo "22 less than 33"

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

command;;

For循环示例

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

四. Shell 的一些注意事项

  $*  这个程序的所有参数

for $int in 1 2 3 4 5

      局部变量一般是指写在函数中的变量,他的生命力是有限的。局部变量比较好理解,这里就不再多介绍了。

 

3.2. 变量

 

do

 

int1 -le int2 int1 <= int2

 

int1 -eq int2 相等?

 

echo $sq

2.19.3 算术比较运算符

2.3 常量

fi

2.8 数字运算

  echo $i

[ -x "$file" ] 判断$file是否存在且有可执行权限,同样-r测试文件可读性

  a=a+1

本文由9159.com发布于操作系统,转载请注明出处:  shell既是一种命令语音,本文出现的 "shell编

关键词:

上一篇:没有了
下一篇:没有了