这两天初次接触shell编程,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。如果对 windows的dos有了解,可以这样理解,其实shell脚本文件和.bat批处理文件差不多,不过linux下的shell比起windows的 dos强大很多。

  shell有很多种,如bash、sh 、tcsh、 ksh等,linux系统里面默认使用的是bash。

  下面看一下学习shell的第一个程序:

  输入命令vi my_01.sh,创建一个my_01.sh文件并用vi编辑器打开。编辑内容如下:

1 #!/bin/bash
2 echo "aaaa"
3 echo "第一次接触shell"

  这里第一行是指让bash这个shell去执行这个shell程序。echo是用来输出的,第二行和第三行分别输出两句话。

执行这个shell程序可以用如下几种方法:

  1  ./my_01.sh

  2  . my_01.sh

  3  bash my_01.sh

  下面是第二个shell程序:

1 #!/bin/bash
2 #my_02.sh
3 read -p "please input your name:" name
4 echo "$name,welcome!"

  这里第三行read命令是指等待用户输入,-p后面是指提示,它还有一个参数-t是设置等待时间的。这个程序运行结果如下:

[liuling@bogon test]$ ./my_02.sh
please input your name:liuling
liuling,welcome!

  注:第四行echo使用的是双引号,如果使用单引号的话,则这句就会直接输出 $name,welcome! 。双引号是可以解析里面的变量的,而单引号则不行。

下面看看shell脚本的语法:

一、条件判断if else的使用

if分支语句的写法:

if 条件测试then 满足条件执行什么else 不满足条件执行什么
fi

多分支写法:

if 条件1then 执行命令2
elif 条件1then 执行命令2
else执行命令3
fi

   注:if和fi要配对,以fi结束这个条件判断。在不满足第一个条件下再判断使用的是elif,而不是else if。then必须独占一行。

下面看几个例子:

 1 #!/bin/bash
 2 #my_03.sh
 3
 4 read -p "pelease input your name:" name
 5 read -p "pleaase input your password:" passwd
 6 #if test $name = "liuling"
 7 if [ $name = "liuling" -a $passwd = "lz19921009" ]#dasn备注=号前后要有空格
 8 then
 9     echo "登录成功!"
10 else
11     echo "登录失败!"
12 fi

 1 #!/bin/bash
 2 #my_04.sh
 3
 4 read -p "please input your score:" score
 5
 6 if [ $score -gt 90 ]
 7 then
 8     echo "优秀!"
 9 elif [ $score -gt 80 -a $score -le 90 ]
10 then
11     echo "良好!"
12 else
13     echo "一般!"
14 fi

 1 #!/bin/bash
 2 #my_05.sh
 3
 4 read -p "please input your score:" score
 5 #如果使用(())的话,只能用< > >= <=
 6 if (( $score > 90 ))
 7 then
 8     echo "优秀!"
 9 elif [[ $score -gt 80 && $score -le 90 ]]
10 then
11     echo "良好!"
12 else
13     echo "一般!"
14 fi

  测试用户输入的文件名是目录还是文件:

 1 #!/bin/bash
 2 #my_06.sh
 3
 4 read -p "请输入一个目录或者文件名:" name
 5 if [ -z $name ]
 6 then
 7     echo "你输入的信息为空!"
 8 else
 9     if [ -f $name ]
10     then
11         echo "这是一个文件!"
12     elif [ -d $name ]
13     then
14         echo "这是一个目录!"
15     else
16         echo "不存在这样一个目录或者文件!"
17     fi
18 fi

  这三个例子都是关于if条件判断的用法。条件有这么几种写法:[ 条件 ]、test 条件、[[ 条件 ]]、(( 条件 )),用的最多的是第一种。常用判断符号如下

①、逻辑运算符

  -a  expr1 -a expr2  逻辑与

  -o  expr1 -o expr2  逻辑或

  !  !expr1      逻辑非

②、数值判断

  -eq  num1 -eq num2  是否相等

  -ne  num1 -ne num2  是否不相等

  -gt  num1 -gt num2  是否大于

  -ge  num1 -ge num2  是否大于等于

  -lt  num1 -lt num2  是否小于

  -le  num1 -le num2  是否小于等于

③、字符串判断

  =  str1 = str2  字符串是否相等

  !=  str1 != str2  字符串是否不等

  -n  -n str1    字符串长度是否不等于0

  -z  -z str2    字符串长度是否等于0

④、文件判断

  -r  -r filename  文件是否存在且可读

  -w  -w filename  文件是否存在且可写

  -s  -s filename  文件是否存在且长度非0

  -f  -f filename  文件是否存在且是普通文件

  -d  -d filename  文件是否存在且是一个目录

  在使用条件判断的时候一定要注意空格,如if [ $name = "liuling" -a $passwd = "lz19921009" ],[]里面前后要有一个空格,所有的判断符号以及逻辑运算符号前后都要有空格,否则会报错。使用[[ 条件 ]]的时候只能使用"&&"符号作为逻辑与来代替"-a",如果使用(( 条件 ))的话,只能用< > >= <=符号,而不能使用“-eq”等符号。

二、case的用法

  这里的case优点类似于java中的swith case

case语法如下:

case var in
pattern 1)执行语句1;;
pattern 2)执行语句2;;
pattern 3)执行语句3;;
*)执行语句4;;
esac

注意:*)指匹配其他任意字符串
         每种情况都以;;结束

下面是几个case用法的例子

  1.模拟菜单的选择

 1 #!/bin/bash
 2 #my_07.sh
 3
 4 echo "1 - 普通显示"
 5 echo "2 - 详细显示"
 6 echo "3 - 显示隐藏文件"
 7 echo "4 - 推出"
 8
 9 read -p "请选择操作号:" num
10 case $num in
11     1)
12         ls ;;
13     2)
14         ls -l ;;
15     3)
16         ls -al ;;
17     4)
18         exit ;;
19     *)
20         echo "请输入正确的操作(1--4)"
21         exit ;;
22 esac

三、循环语句的使用

1、for循环

for 变量名 in 取值列表
do命令序列
done

下面是for循环使用的小例子:

 1 #!/bin/bash
 2 #my_08.sh
 3
 4 for a in `seq 1 3 10`
 5 do
 6     echo $a
 7 done
 8 echo "-------------------"
 9 for ((i=1;i<=10;i++))
10 do
11     echo $i
12 done

  这里第四行使用了`seq 1 3 10`,``是反引号,也就是键盘上Esc下面的一个键,``里面可以写执行命令,把执行后的结果返回。

  seq命令是指序列,seq start size max,start是起始,size是步长,max就是限制的数,比如seq 1 3 10,则返回的是1 4 7 10。

  第9行代码也有点特别,有点像java里面的for循环,不过是双重小括号,在shell中这样也是可以的。

  下面是一个统计文件数目的小程序:

 1 #!/bin/bash
 2 #my_09.sh
 3
 4 i=0
 5 for name1 in `ls /etc`
 6 do
 7    # i=`expr $i + 1`
 8    # let i++
 9    # i=$[$i + 1]
10    # i=$(($i + 1))
11    ((i++))
12
13 done
14 echo "文件总数为:$i"

  注:7、8、9、10、11行是数字自增的不同写法,都可以。

2、while循环

while 条件
do命令序列
done

下面是一个录入客户资料的shell脚本:

 1 #!/bin/bash
 2 #my_10.sh
 3
 4 while true
 5 do
 6         echo "登记客户资料(c继续,q退出):"
 7         read choice
 8
 9         case $choice in
10                 c)
11                         echo "请输入客户名字:"
12                         read name1
13                         echo "请输入客户年龄:"
14                         read age1
15                         echo "姓名:"${name1}" - 年龄:"${age1} >>customer.txt
16                         ;;
17                 q)
18                         exit
19                         ;;
20         esac
21 done

注:
>>是指重定向,将标准输出重定向到其他的输出流中,如上面15行是指将标准输出重定向到customer.txt文件。所以echo输出的内容会输出到customer.txt文件中去。

>> 和 > 区别

>>customer.txt 追加保存到customer.txt文件中, 如果文件不存在会自动创建。

>customer.txt 就会重新写入, 覆盖原有的数据

四、函数的应用

function 函数名(){}
or
函数名(){}函数调用:
函数名
函数名 参数1 参数2

下面是一个小例子程序:

1 #!/bin/bash
2 #fun.sh
3 function add(){
4     echo $(($1+$2))
5 }
6 add 20 30
7 add 20 90

  

转载于:https://www.cnblogs.com/dasn/articles/3237292.html

转:初学shell脚本--shell语法使用相关推荐

  1. Shell脚本基本语法大全

    目录 1.如何理解Shell脚本 2.如何一行执行多条命令 3.脚本的执行 4.管道与重定向 5.变量的使用 6.数组的使用 7.转义和引用 8.运算符 9.各种特殊符号 10.测试与判断 11.分支 ...

  2. shell脚本常用语法大全

    shell脚本常用语法大全 一.shell简介 二.shell常用命令 2.1echo 2.2printf 2.3test 三.shell变量 3.1变量命名规则 3.2赋值方式 3.3使用变量 3. ...

  3. shell脚本——shell函数详解

    shell脚本--shell函数详解 一.shell函数 1.shell函数的概念 2.shell函数的格式 (1)函数的定义 (2)调用函数的方法 3.函数返回值 4.函数传参 5.函数变量的作用范 ...

  4. Shell脚本基础语法

    一.       编写shell的格式 1 第一行决定使用哪一种shell Bash:#! /bin/bash Python: #! /usr/bin/python 不知道解释器的完整路径,可使用wh ...

  5. 最全shell脚本语句语法使用(超详细)

    博文大纲: 1.对谈式脚本--read语句 2.shell脚本中的测试的字符 3.判断脚本举例 4.条件判断--if语句 5.条件判断--case语句 6.条件判断--function函数结合case ...

  6. shell脚本常用语法——获得当前目录

    1 . 获得shell脚本所在的绝对路径 CURRENT_DIR=$(cd $(dirname $0); pwd) 或者 CURRENT_DIR=$(cd `dirname $0`; pwd) 执行步 ...

  7. linux 循环shell脚本,shell脚本的使用---for循环

    shell脚本的循环:重复执行命令 1.for循环 语法 for 变量名称 in 变量值列表 do 命令 done for根据变量值列表中的内容,重复执行命令,直到变量值列中的所有内容都取值完后结束. ...

  8. Shell脚本——Shell编程规范及变量

    Shell编程规范及变量 一.Shell脚本概述 1.1.1 Shell基本概念 1.1.2 Shell脚本应用场景 1.1.3 Shell作用--翻译官 二.shell编程规范 2.1 用户登录sh ...

  9. c语言加密shell脚本,shell脚本加密

    如何保护自己编写的shell程序 要保护自己编写的shell脚本程序,方法有很多,最简单的方法有两种:1.加密 2.设定过期时间,下面以shc工具为例说明: 一.下载安装shc工具 shc是一个加密s ...

  10. 手把手教你写shell脚本——shell循环结构

    一 条件语句 1.1 if-then #!/bin/bash if root thenecho "hello" fi 如果命令运行成功(退出码为0),则then部分的命令被执行 1 ...

最新文章

  1. 长连接测试_如何选择好一根测试电缆组件?
  2. 广东省工业和信息化厅关于印发广东省 5G 基站和数据中心总体布局规划 (2021-2025 年)的通知...
  3. 如何用互联网上的广告来赚取广告费——有点吹牛吗?
  4. 2018.3.26 1501 二叉树最大宽度和高度
  5. WPF特效-拼图游戏
  6. Hibernate之必须导入jar包
  7. oracle安装实验,Oracle之课程实验一(安装oracle)
  8. Java 获取指定日期的方法汇总
  9. 【机器学习_2】机器学习资料
  10. iphone 计算机乱码,苹果电脑Word变乱码怎么办
  11. 360*640是什么设备的分辨率?
  12. 多帧点云数据拼接合并_点云拼接
  13. 心中无码便是高清,用“脑补”除马赛克!
  14. burp数据包抓取操作
  15. 集成googlepay,出现Service not registered
  16. iOS生成推送push证书,push.p12文件
  17. 6阶子群同构于s3或者z6_[2017年整理]离散数学复习.ppt
  18. 微信app支付服务端开发记录
  19. js制作的炫酷3D太阳系行星运行效果
  20. 纵断面 java_道路土方计算软件

热门文章

  1. Julia : DataFrame常见用法
  2. 阿里巴巴集团 CTO 约你聊聊这些事
  3. 机器学习笔记(二):矩阵、环境搭建、NumPy | 凌云时刻
  4. 洞察|2019年混合云发展:前景广阔 巨头混战 SD-WAN成重要推手
  5. 【图像处理基础】基于matlab图像Harris角点检测【含Matlab源码 1731期】
  6. 2021年全国研究生数学建模指导
  7. 【优化算法】符号LMS算法【含Matlab源码 697期】
  8. 【滤波器】基于matlab窗函数法FIR数字滤波器设计【含Matlab源码 316期】
  9. 【C++】STL-函数对象(仿函数)
  10. 同名文件替换怎么恢复_U盘里被替换的文件怎么恢复?方法选对,其实很简单...