shell编程

示例1

ex1 文件内容如下:

#!/bin/sh

#This is to show what a example looks like.

echo "My First Shell!"

echo "This is current directory."

/bin/pwd

echo

echo "This is files."

/bin/ls

使用sh example 运行当前shell 文件 (example:文件名)

注意:

Shell 脚本以.sh 结尾

运行后结果:

ex1 文件内容详解:

#!/bin/sh   shell 脚本文件开头内容固定格式

#This is to show what a example looks like. #是注释类似于Java中的// 或 /**/

echo "My First Shell!"  echo 是输出类似于Java中的System.out.println("My First Shell!");

shell 最主要的作用是执行一些命令

/bin/pwd  shell中要是用绝对路径

echo  输出空行相当于Java中空的System.out.println

echo "This is files."  输出语句

/bin/ls 列出当前文件所在文件目录的文件列表

shell应用实例

如果我们想使用Shell脚钵,指定个计划任务,比如每周的周一到周五给管理员发一个信息(比如当前主机的信息,如内存使用情况,在线人数,磁盘空间等)

ex2文件内容:

#!/bin/sh

/bin/date +%F >> /test/shelldir/ex2.info

echo "disk info:" >> /test/shelldir/ex2.info

/bin/df -h >> /test/shelldir/ex2.info

echo >> /test/shelldir/ex2.info

echo "online users:" >> /test/shelldir/ex2.info

/usr/bin/who | /bin/grep -v root >> /test/shelldir/ex2.info

echo "memory info:" >> /test/shelldir/ex2.info

/usr/bin/free -m >> /test/shelldir/ex2.info

echo >> /test/shelldir/ex2.info

#write root

/usr/bin/write root < /test/shelldir/ex2.info && /bin/rm /test/shelldir/ex2.info

#crontab -e

#0 9 * * 1-5 /bin /sh /test/ex2.sh

ex2文件内容详解:

#!/bin/sh   固定格式

/bin/date +%F >> /test/shelldir/ex2.info  bin文件加下的data命令转换日期格式输入到

/test/shelldir/ex2.info 文件中,如果没有这个文件就会创建一个新的文件

+%F 转换日期格式

>>  追加输出(俩大于号追加输出  )

>  覆盖掉原有信息

echo "disk info:" >> /test/shelldir/ex2.info  追加disk info:(输出磁盘信息)到/test/shelldir/ex2.info文件中

/bin/df -h >> /test/shelldir/ex2.info    把磁盘信息追加到 /test/shelldir/ex2.info文件中

输入/bin/df -h 显示:

系统文件、大小、已用、剩余、使用百分比、目录 等信息

echo >> /test/shelldir/ex2.info  把一个空行追加到 /test/shelldir/ex2.info中

echo "online users:" >> /test/shelldir/ex2.info  把online users:追加输入到/test/shelldir/ex2.info中

/usr/bin/who | /bin/grep -v root >> /test/shelldir/ex2.info

把当前登录人的信息输出作为/bin/grep的输入,排除root用户追加输入到/test/shelldir/ex2.info中

/usr/bin/who 当前登录人

-v:排除

使用的命令一般在/bin 下 和 /usr/bin 下

/usr/bin 一般使用root登录时使用

echo "memory info:" >> /test/shelldir/ex2.info  把memory info:追加输入到 /test/shelldir/ex2.info中

/usr/bin/free -m >> /test/shelldir/ex2.info 把内存信息追加输入到 /test/shelldir/ex2.info中

/usr/bin/free -m 显示内存信息

echo >> /test/shelldir/ex2.info 追加输入到/test/shelldir/ex2.info中

#write root

/usr/bin/write root < /test/shelldir/ex2.info && /bin/rm /test/shelldir/ex2.info

把/test/shelldir/ex2.info文件中的信息写给管理员root用户 并且写成功之后 删除 /test/shelldir/ex2.info文件

< 写给

&& 如果成功的话  && 的前边后边都执行如果失败则不执行

rm 删除命令

#crontab -e  定时执行命令

#0 9 * * 1-5 /bin /sh /test/shelldir/ex2.sh    每周一到周五执行 ex2.sh 脚本

0 9 * * 1-5 格式:分时天月星期

如果注释掉 && /bin/rm /test/shelldir/ex2.info后执行 sh ex2.sh结果如下

将返回信息写给了当前本机root用户

如果将&& /bin/rm /test/shelldir/ex2.info 注释放开执行之后,就将 /test/shelldir/ex2.info文件删除了

Linux替换命令:

%s/old/new/g

如果替换的内容中有 / 需要  %s+/test/shelldir/ex2.info+/test/shelldir/ex2.info/g 用+表示分隔

shell 编程的基础知识(变量、命令、运算)

shell 的变量

变量是shell传递数据的一种方法,用来代表每个取值的符号名

Shell有两类变量:临时变量和永久变量。

临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括。用户自定义变量、位置变量。

永久变量是环境交量,其值不随shell脚本的执行结束而消失.

关于临时变量和永久变量的理解:

临时变量:相当于在shell脚本中写的变量,这个变量只在脚本内部用

永久变量: 在整个linux系统中都可以用相当于全局变量,类似于Java环境变量中的path

永久变量:

解析:

echo $PATH 输出$PATH 输出当前计算机Linux的环境变量目录

echo $LANG 输出当前计算机Linux的字符集

变量的自定义:

用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。一般变量使用大写字母表示(小写也可以),并且是英文字母开头,赋值号“=”两边应没有空格,如NUM=5、STR=""A String"

可以将一个命令的执行结果赋值给变量:但是需要使用命令替换符号。

注意单引号和双引号的区别,“”号是会把里面的变量值进行输出,‘’是会把内容原封不动输出,不会识别里面的变量。

使用set命令查看所有的变量(当前系统中所有的变量)。

使用unset命令删除指定的变量。

命令替换符号:如图所示键盘按钮在英文状态下的``

自定义变量:

使用set命令:获取当前系统下所有变量

使用unset命令:

P1 = 10 设置自定义变量P1等于10

echo $P1 输出变量P1

P1=500 修改变量值 P1为500

cho $P1 输出变量P1

P1=”A string" 修改变量值 P1为A string

set l grep P1  取出全部变量并过滤P1

P1=`date` 把data的执行结果原封不用的赋值给P1

echo $P1  输出P1变量

P2=$P1  把P1的值赋值给P2

echo $P2 输出P2

P2=”time is $P1” 把P2的值设置成time is $P1

echo $P2 输出P2

在Shell里面还有俩种特殊的变量,一种是位置变量, 还有种是特殊的变量,在我们编

写Shell的时候十分的常用,一定要熟悉他们。

位置变量: Is -l file1 file2 fle3...(n范围=149) 在代码里使用$0-9进行替代

Is -l  打印当前目录的所有信息

file1 file2 file3...  都是占位的参数,最多只能到file9

es3文件内容::

#!/bin/sh

DATE=`/bin/date +%Y%m%d`

echo "TODAY IS $DATE"

/bin/ls -l $1

/bin/ls -l $2

/bin/ls -l $3

es3文件详解

#!/bin/sh

DATE=`/bin/date +%Y%m%d`  声明变量DATE  `` 是命令替换符 把命令/bin/date +%Y%m%d的执行结果赋值给DATA

echo "TODAY IS $DATE" 输出 TODAY IS $DATE     $DATE 是变量

/bin/ls -l $1

/bin/ls -l $2

/bin/ls -l $3

$1、 $2、 $3:占位符在执行脚本的时候需要将占位符的位置进行补全

注意:$0是shell执行文件本身,$1到$9是可以传递的参数最多9个

/bin/ls -l 绝对路径下的文件列表

ls -l 相对路径下的文件列表

查看test目录下的文件信息

es3文件执行结果:

特殊变量:

$*这个程序的所有参数(当前执行的.sh文件所有参数)

$#这个程序的参数个数(当前执行的.sh文件所有参数个数)

$$这个程序的PID

$!执行上一个后台命令的PID

$?执行上一个命令的返回值

$(0-9)显示位置变量

es4文件内容:

#!/bin/sh

DATE=`/bin/date +%F`

echo "today is $DATE"

echo '$# :' $#

echo '$* :' $*

echo '$? :' $?

echo '$$ :' $$

echo '$0 :' $0

单引号包裹的内容原样输出

es4文件执行结果:

键盘录入:
命令: read从键盘读入数据,赋给变量。(类似Java中的scanner )

es5文件内容

#!/bin/sh

read f s t

echo "the first is $f"

echo "the second is $s"

echo "the third is $t"

es5内容详解

#!/bin/sh

read f s t          f s t  三个变量 外部脚本指定的时候要传递这三个参数然后输出打印

echo "the first is $f"

echo "the second is $s"

echo "the third is $t"

 在输入的时候

sh ex5.sh  

10 20 30

执行结果:

在执行的时候可以加-x选项表示跟踪,用于脚本调试

在输入的时候

sh -x ex5.sh  

之后出现

+ read f s t   ( + 表示当前脚本执行到哪了,然后输入 30 50 80 )

30 50 80

执行结果

Shell运算

expr命令,对整数进行运算(只能计算整数)。

注意点:

1 expr的运算必须用空格间隔开。

2*表示转义字符。

3保持先算乘除后算加减,如果需要优先运算则需要加命令替换符。

4也可以对变量进行运算操作。

[root@bhz004 test] # NUM=30     //声明一个变量等于30

[root@bhz004 test]# echc `expr $NUM + 8 ` 输出这个变量+8

expr 不能计算小数

使用test命令可以对文件、字符串等进行测试,一般配合控制语句使用,不应该单独使用。如下:

字符串测试:

test str1=str2测试字符串是否相等

test str1!=str2测试字符串是否不相等

test str1测试字符串是否不为空

test -n str1测试字符串是否不为空

test -z str1测试字符串是否为空

int测试:

test int1-eq int2测试整数是否相等

test int1 -ne int2测试整数是否不相等

test int1-ge int2测试int1是否>=int2

test int1-gt int2 测试int1是否>int2

test int1 -le int2 测试int1是否< =int2

test int1 -lt int2测试int1是否<int2

文件测试:

test -d file指定文件是否目录

test f file  指定文件是否常规文件

test -x file指定文件是否可执行

test -r file指定文件是否可读

test -w file指定文件是否可写

test -a file指定文件是否存在

test s file文件的大小是否非0

test 命令都是在shell脚本里面配合if else  if 执行的

If语法

语法格式:   if test -d $1 then  .….  else  ...  fi

变量测试语句可用[]进行简化,如test -d $1等价于[-d $1 ]

注意:["空格"-d $1"空格"]

es6 内容:

#!/bin/sh

# if test $1 then ... else ... fi

if [ -d $1 ]

then

echo "this is a directory!"

else

echo "this is not a directory!"

fi

es6 内容详解:

#!/bin/sh

# if test $1 then ... else ... fi

if [ -d $1 ]    //等价于  if test -d $1   判断这个参数是否是一个文件夹

then

echo "this is a directory!"   // 如果是文件夹输出

else

echo "this is not a directory!"   //如果不是文件夹输出

fi

注意结尾处 if 的写法 极度恶心  fi

输出结果:

语法有错误会提示提示示例如下:

以下示例也是错的

这里执行之后会报错

注意空格,注意编码格式!!!!!!!!

es7内容:

#!/bin/sh

# if test  then ... elif test then ... else ... fi

if [ -d $1 ]

then

echo "is a directory!"

elif [ -f $1 ]

then

echo "is a file!"

else

echo "error!"

fi

es7内容详解:

#!/bin/sh

# if test  then ... elif test then ... else ... fi

if [ -d $1 ]

then

echo "is a directory!"

elif [ -f $1 ]

then

echo "is a file!"

else

echo "error!"

fi

如果是文件夹输出is a directory!如果是文件输出is a file!否则就是输出error

执行结果:

逻辑与逻辑或

es8内容:

#!/bin/sh

# -a -o

if [ $1 -eq $2 -a $1 = 1 ]

then

echo "param1 == param2 and param1 = 1"

elif [ $1 -ne $2 -o $1 = 2  ]

then

echo  "param1 != param2 or param1 = 2"

else

echo "others"

fi

es8内容详解

#!/bin/sh

# -a -o

if [ $1 -eq $2 -a $1 = 1 ]  如果第一个参数和第二个参数相等并且第一个参数等于1

then

echo "param1 == param2 and param1 = 1"  输出param1 == param2 and param1 = 1

elif [ $1 -ne $2 -o $1 = 2  ]  如果第一个参数不等于第二个参数或者第一个参数等于2

then

echo  "param1 != param2 or param1 = 2"   输出param1 != param2 or param1 = 2

else

echo "others"  否则输出others

fi

执行结果:

for循环:

es9内容

#!/bin/sh

# for var in [params] do ... done

for var in 1 2 3 4 5 6 7 8 9 10

do

echo "number is $var"

done

es9内容详解:
#!/bin/sh

# for var in [params] do ... done

for var in 1 2 3 4 5 6 7 8 9 10    循环的内容都需要写出来

do

echo "number is $var"

done

Select循环:

es10 内容:

#!/bin/sh

# select var in [params] do ... done

select var in "java" "c++" "php" "linux" "python" "ruby" "c#"

do

break

done

echo "you selected $var"

es10内容执行结果:

case语句

es11内容:

#!/bin/sh

read op

case $op in

a)

echo "you selected a";;

b)

echo "you selected b";;

c)

echo "you selected c";;

*)

echo "error"

esac

es11内容详解:

#!/bin/sh

read op   从外部读取变量op

case $op in

a)

echo "you selected a";;     如果输入a输出you selected a

b)

echo "you selected b";;

c)

echo "you selected c";;

*)

echo "error"

esac        注意结尾

执行结果:

While语法

es12内容:

#!/bin/sh

#while test do ... done

num=1

sum=0

while [ $num -le 100 ]

do

sum=`expr $sum + $num`

num=`expr $num + 1`

done

#sleep 5

echo $sum

es12内容详解:
#!/bin/sh

#while test do ... done

num=1

sum=0     声明两个变量num 和sun

while [ $num -le 100 ]   如果num 小于等于100

do

sum=`expr $sum + $num`   把 $sum + $num的运算结果赋值给sun

num=`expr $num + 1`        $num + 1 的运算结果赋值给num

done

#sleep 5             等5s后输出

echo $sum           输出5050

执行结果:

continue 和 break 语法

es13  内容:

#!/bin/sh

i=0

while [ $i -le 100 ]

do

i=`expr $i + 1`

if [ $i -eq 5 -o $i -eq 10 ]

then continue;

else

echo "this number is $i"

fi

if [ $i -eq 15 ]

then break;

fi

done

es13  内容详解:

#!/bin/sh

i=0       声明白能量i=0

while [ $i -le 100 ]    i小于等于100 执行循环体

do

i=`expr $i + 1`   $i + 1 的值赋值给i

if [ $i -eq 5 -o $i -eq 10 ]   如果i 等于5 或 i 等于10

then continue;      跳过当前循环

else

echo "this number is $i"   否则输出当前i的值

fi

if [ $i -eq 15 ]     如果i等于15 退出while循环

then break;

fi

done

执行结果:

当前结果没有等于10 的页没有等于5的,等于15退出循环

shell编程入门、shell编程的基础知识(变量、命令、运算)、shell编程的语句相关推荐

  1. 编程入门:C语言基础知识全网超全不用到处找了!

    你背或者不背,干货就在那里,不悲不喜 你学或者不学,编程就在那里,不来不去 听到这话的你是否略感扎心? 01基础知识 计算机系统的主要技术指标与系统配置. 计算机系统.硬件.软件及其相互关系. 微机硬 ...

  2. c语言 异或_编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)

    你背或者不背,干货就在那里,不悲不喜 你学或者不学,编程就在那里,不来不去 听到这话的你是否略感扎心? 01基础知识 1. 计算机系统的主要技术指标与系统配置. 2. 计算机系统.硬件.软件及其相互关 ...

  3. ☀️ 学会编程入门必备 C# 最基础知识介绍(二)——进制、原码反码、基本语法、数据类型、类型转换

    C#

  4. 计算机基础知识好学吗,计算机编程好学吗 需要什么基础知识?

    计算机编程好学吗 需要什么基础知识?想要进入编程行业,入门是比较关键的,经常能听到很多人说,想学习编程不难,入门更为简单,只要你对他感兴趣就能学,但是至于学的怎么样,那就不好说了,尤其是在涉及到高级编 ...

  5. python编程入门指南-最简单的Python编程入门指南,没基础也能快速入门Python编程...

    原标题:最简单的Python编程入门指南,没基础也能快速入门Python编程 对Python这门编程语言来讲,几乎是没什么不能做到的.最难的不过是如何入门,也就是你进入Python编程的第一步. 其实 ...

  6. 青少年编程python一节课多长时间_10节免费少儿编程微课:Python基础知识微课

    课程介绍课程名称:Python基础知识微课(10节) 课程内容:通过对Python基础知识的讲解,教孩子们学会使用海龟编辑器进行编程,了解Python的基础知识,学完课程之后,孩子们可以用海龟编辑器快 ...

  7. php插入js教程,JavaScript_JavaScript入门教程(2) JS基础知识,在什么地方插入 JavaScript  Ja - phpStudy...

    JavaScript入门教程(2) JS基础知识 在什么地方插入 JavaScript JavaScript 可以出现在 HTML 的任意地方.使用标记,你可以在 HTML 文档的任意地方插入 Jav ...

  8. 大数据入门第一课 Hadoop基础知识与电商网站日志数据分析

    大数据入门第一课 Hadoop基础知识与电商网站日志数据分析 本课程从Hadoop核心技术入手,以电商项目为依托,带领你从0基础开始上手,逐步掌握大数据核心技术(如:HDFS.YARN.MapRedu ...

  9. Linux Shell脚本入门教程系列之(二)第一个shell脚本

    本文是Linux Shell脚本系列教程的第(二)篇,更多shell教程请看:Linux Shell脚本系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们 ...

  10. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

最新文章

  1. Linux下磁盘I/O测试
  2. Cordic算法——圆周系统之向量模式
  3. timestamp with local time zone类型和timestamp with time zone
  4. 国内CVPR和图像处理领域的公司和研究机构
  5. 更强、更稳、更高效:解读 etcd 技术升级的三驾马车
  6. 开源社区ITGeek介绍
  7. 【数据结构与算法】之深入解析“两数之和”的求解思路与算法示例
  8. qt交叉编译环境搭建方法
  9. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
  10. spring cloud微服务分布式云架构-commonservice-config配置服务搭建
  11. 比尔·盖茨录视频祝大家“新春快乐
  12. springboot 微服务_Spring Boot在微服务中的最佳实践
  13. html文章标题加粗,织梦去除推荐文章标题加粗标签的方法
  14. rostcm6情感分析案例分析_周小鹏分析情感案例——你愿意嫁给一个离过婚带孩子男人吗?...
  15. PAYPAL使用虚拟信用卡验证的技巧
  16. C# 仿windows资源管理器
  17. Java类汽车,JAVA 建立一个汽车AutoMobile类......
  18. PHP中 逗号,和句号.的区别
  19. squid高性能代理缓存服务器
  20. DottedDict-提供一种使用点路径符号访问列表和字典方法的python库

热门文章

  1. 【SVM预测】基于哈里斯鹰算法改进SVM实现数据回归预测Matlab代码
  2. java 如何日期yyyy-mm-dd转换为yyyy/mm/dd_关于java:如何将字符串转换为yyyy-MM-dd HH:MM:ss格式的日期...
  3. 使用 CMake 构建 LLVM
  4. 极简HTML渲染引擎,CodeMirror 代码渲染神器的极简入门实例
  5. python实现滑动京东滑块验证码
  6. android中蓝牙的使用方法,Android蓝牙开发教程(一)
  7. 全渠道的会员管理方案 从哪里开始——数字化+私域流量
  8. 计算2个时间之间的间隔多长时间
  9. 数据库表设计的十四技巧
  10. 基于web的个人理财管理系统的设计与实现