shell脚本编写-基础练习_使用shell语言编写一个脚本实现比较从键盘输入的变量x和y是否相等,如果相等输出ye_2.wa的博客-程序员宅基地

技术标签: 脚本  Linux  shell  

#! /bin/sh
echo "please input x y";
read x y;   #连续输入一组参数 以空格隔开
z=`expr $x+$y`;
echo "The sum is $z"

$? 是上一条命令的终止状态, 相当于C语言的main函数的返回值。

字符串比较  =、!=、-n、-z判断相等,不等,长度大于零,长度等于0


#! /bin/Bash
echo "please x y .if 0 is = then !="
read i y
[ "$i" = "$y" ]
echo $? #保存前一个命令的返回码

#! /bin/Bash
read i
[ -n "$i" ]
echo $? #保存前一个命令的返回码

数字比较 test语句来比较
-eq 相等 | -ge大于等于 | -le 小于等于| -ne 不等于 | -gt 大于 | -lt 小于


#! /bin/Bash

read x y
if test $x -eq $y
  then
	echo "$x=$y"
else
	echo "$x!=$y"
fi


逻辑操作  

!反:与一个逻辑值相反的逻辑值

-a 与(and) :两个逻辑值为“是”返回为“是”,反之为否

-o 或(or):两个逻辑值有一个为“是”则为是

#! /bin/Bash

str1="hehe"
str2=""
str3="hehe"
echo "is equals"

[ "$str1" -a "$str2" ]
echo $?

[ "$str1" -a "$str3" ]
echo $?

[ "$str1" -o "$str3" ]
echo $?

[ "$str1" -o "$str2" ]
echo $?

文件操作

-d 判断对象存在且为目录

-f 判断对象存在且为文件

-L 对象存在且为符合连接

-r 对象存在且可读

-s 对象存在且长度非零

-w 对象存在且可写

-x 对象存在且可执行

判断 /lw 为文件则 ls,为文件则读取内容

if [ -d /lw ]; then ls; elif [ -f /lw ]; then cat /lw; else echo "error"; fi

for 操作 ,in的列表中 空格表示换行

for i in a,b,c I,2 3,5; do echo $i; done


#for语句中的双括号不能省,最后的分号可有可无,表达式temp=`expr $temp + $j`的加号两边的空格不能省,否则会成为字符串的连接。

#! /bin/Bash

temp=0

for((i=0;i<100;i++))
   do
	temp=`expr $temp + $i`
   done
   echo "The result is $temp"

while 循环

#! /bin/Bash

temp=0
num=0

while(($num<=100))
do
   temp=` expr $temp + $num `
   num=` expr $num + 1` 
 done
   echo "The result is $temp"

until 循环

重复do和done之间的操作直到表达式成立为止。

#! /bin/Bash

temp=0
num=0

until [ $num -gt 100 ]
do
	temp=` expr $temp + $num `
	num=` expr $num + 1`
done

echo " The result is $temp"


for+if 结合语法。

if 语法格式为:

if      比较式

then 操作

elif   比较式

then 操作

......

else 操作

fi      结束符

#! /bin/Bash

for((i=0;i<10;i++))
 do
   if(($i==1))
	then 
	  echo "This is 1"
	elif(($i==2))
	 then
	  echo "This is 2"
	elif(($i==3))
	 then
	  echo "This is 3"
	elif test $i -eq 4
	 then
	  echo "This is 4"
	else
	  echo "This is  othen : $i"
    fi
 done


case 表达式 in

值1|值2)

操作;;

值3|值4)

操作;;

值5|值6)

操作;;

*)

操作;;

esac




Shell的函数



函数名( )

 {

函数体

  }

函数调用方式为

函数名  参数列表


函数定义完成后必须同时写出函数的调用

#! /bin/Bash

add()
{
a=$1
b=$2
z=` expr $a + $b `
echo "The sum is :$z"
}

add $1 $2

执行

[root@localhost  bin]#./ test18  10  20

The sum is 30


在刚刚学习写shell 批处理时候,进行逻辑运算中,少不了需要进行基础的:四则运算,这里说说在linux shell 里面简单的实现方法。
1.简单方法
$ b=$((5*5+5-3/2)) 
$ echo $b
29
 
在linux shell中,我们可以使用 $(()) 将表达式放在括号中,即可达到运算的功能。
2.其它方法:
用:expr 实现运算
$ expr 5 - 4
1
 

注意:将需要运算的表达式写入在expr 后面即可,保证 参数与运算符号中间有空格隔开。


数组变量操作

方法一: 一次赋一个值

数组名[下标]=变量值

# array[0]=pear

# array[1]=apple

# array[2]=orange

# array[3]=peach

 

方法二: 一次赋多个值

# array=(tom jack alice)

# array=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3

# array=(`ls /var/ftp/shell/for*`)

# array=(tom jack alice "bash shell")

 

# declare -a

declare -a array='([0]="pear" [1]="apple" [2]="orange" [3]="peach")'

declare -a array='([0]="tom" [1]="jack" [2]="alice")'

 

访问数组元数:

# echo ${array[0]} 访问数组中的第一个元数

# echo ${array[@]} 访问数组中所有元数  等同于 echo ${array1[*]}

# echo ${#array[@]} 统计数组元数的个数

# echo ${array[@]:1} 从数组下标1开始

# echo ${array[@]:1:2} 从数组下标1开始,访问两个元素


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011278496/article/details/19832819

智能推荐

使用了Gunicorn或者uWSGI,为什么还需要Nginx?_gunicorn 可以不用nginx吗-程序员宅基地

Nginx是一个http服务器,可以做请求转发,负载均衡 (处理静态资源,并将动态请求转发给Gunicorn);Gunicorn是一个实现了wsgi的一个处理python代码的服务器 (处理动态请求)* Nginx更安全* Nginx能更好地处理静态资源(nginx相对uwsgi/Gunicorn处理静态文件更有优势,性能更好)* Nginx也可以缓存一些动态内容* Nginx可以更好地配合CDN( 内容分发网络)* Nginx可以进行多台机器的负载均衡* 不需要在ws..._gunicorn 可以不用nginx吗

hive insert overwrite directory 报错_hive overwrite报错-程序员宅基地

hive insert overwrite directory 报错:2017-06-07T16:56:11,766 ERROR [main]: exec.Task (:()) - Failed with exception Unable to move source hdfs://testhadoop/tmp/t1/.hive-staging_hive_2017-06-07_16-56-05_91_hive overwrite报错

下载安装,在图文并茂在VS2008中配置QT_vs2008安装qt插件-程序员宅基地

(一)下载安装,在图文并茂在VS2008中配置QT1.首先电脑上得安装VS2008,并安装上VS 2008 SP1补丁,再安一个支持VS2008的VC助手(Visual Assist)2.然后在这里:http://qt.csdn.net/down-sdk.aspx下载最新版的QT安装包如:qt-win-opensource-src-4.8.4.zip和下载VS2008插件(_vs2008安装qt插件

JavaScript与FireFox的不解之缘——错误处理与调试_火狐调试代码-程序员宅基地

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 作为IT界的一员出现Bug真是在正常不过。在学习JavaScript的时候难免自己因为各种原因而导致出错,知道错误是什么之后才能快准狠的修改之。在学习过程中都习惯使用火狐浏览器进行查看效果,那么如何完美的借助火狐达到目的呢?下边就是答案!【错误处理】..._火狐调试代码

【论文阅读笔记】从ResNet到ResNeXt_resnet34和resnet50参数量-程序员宅基地

目录论文地址ResNet论文地址ResNet:https://arxiv.org/pdf/1512.03385.pdfinceptionv3 https://arxiv.org/pdf/1512.00567.pdfresnext https://arxiv.org/abs/1611.05431resnest https://hangzhang.org/files/resnest.pdfResNet_resnet34和resnet50参数量

Discuz X3游客看小图功能导致文字内容隐藏的【修复方法】-程序员宅基地

如果帖子内容以图片开始,并且开启了游客看小图功能,那么图片下面的文字也会被隐藏,这是不科学的(在图片上边的文字不会被隐藏)查看DZ源代码,发现是程序猿疏忽漏掉了</div>下边1314学习网给出解决办法:打开文件:template\default\forum\discuzcode.htm搜索<p class="xg1 y">$attach[dateline] {lang...

随便推点

JavaWeb_01_单元测试&反射&注解-程序员宅基地

今日内容1. Junit单元测试2. 反射3. 注解Junit单元测试:* 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。 2. 白盒测试:需要写代码的。关注程序具体的执行流程。* Junit使用:白盒测试 * 步骤: 1. 定义一个测试类(测试用例) * 建议: * 测试类名:被测试的类名Test CalculatorTest * 包名:xxx.xxx.xx.test cn.itcast.test 2. 定义测试方

我的CTF之旅(三)_ctf 404-程序员宅基地

今天做的几个题是关于隐写术,话不多说,题目走起。 题目:啥? 下载是一张图片 winhex分析,找到key 题目:红与黑 打开一张图 直接上神器Stegsolve,找到图层,发现key 题目:FIND 用 扫一下,发现是个二维码: 现在还扫不了,用画图选取反色处理下,就能扫了,得到key_ctf 404

Sip 响应状态码 对照 详解_480 temporarily unavailable-程序员宅基地

SIP应答消息状态码与功能类型 状态码 状态说明临时应答(1XX) 100 Trying 正在处理中180 Ringing 振铃181 call being forwarder 呼叫正在前向182 queue 排队181* session progress 会话进行会话成功(2XX) 200 OK 会话成功重定向(3XX) 300 multiple 多重选择301 mo..._480 temporarily unavailable

mysql向sybase ase迁移指南_mysql迁移到sybase ase 中null问题处理_邹郎的博客-程序员宅基地

[root@testlihb ~]# su - mysql-bash-4.1$ mysql -uroot -p********* -h127.0.0.1 -P3306mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || my..._mysql 转换sybase

鲲鹏微认证的 一些知识点_鲲鹏微认证与华为微认证-程序员宅基地

EIP支持与ECS、BMS、NAT网关、ELB、虚IP灵活的绑定与解绑,带宽支持灵活调整,应对各种业务变化通用计算增强型KC1搭载自研华为鲲鹏920处理器及25GE智能高速网卡,提供强劲鲲鹏算力和高性能网络,更好满足政府、互联网等各类企业对云上业务高性价比、安全可靠等诉求。适用场景:大数据HPC(渲染、基因)互联网应用政企应用建站电商等中长尾场景Redis迁移失败是什么原因?在进行数据迁移时在进行数据迁移时,如果Redis实例发生了主备倒换,可能会导致迁移失败。可联系技术支持,将主备倒换关闭,待迁移成功后,_鲲鹏微认证与华为微认证

主网上线后续,一文读懂ASC人工智能生态发展-程序员宅基地

新加坡时间2021年6月16日,AI人工智能协作应用生态平台ASC主网如约上线,预示着AI人工智能协作应用生态公链正式进入3.0发展阶段。高达3000万美金的募资,即将而来的3.0生态网络升级、ASC钱包1.20版本发布、矿池模块战略升级,还未实现TOKEN公开流通,ASC便已极具“财富效应”。自称为人工智能赋能者的ASC经历了“愿景”迭代,到如今3.0致力于打造一个AI协同智能平台,将用户在不同AI人工智能场景的行为数据打通,以用户为中心,将人、物、服务三张网打造为一张网。重建巴别塔,ASC究竟走

推荐文章

热门文章

相关标签