大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖。

1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺带这学习shell 的语法:

什么时候helloworld是必不可少的,第一个脚本肯定与helloworld是离不开的:

#!/bin/sh

a="hello world!"num=2echo"a is : $a num is : ${num}nd"

运行结果:ais : hello world! num is : 2nd

shell脚本简单易懂,只要有一点点c语言的基础,这些都是小case;

2.下面带着大家学学if语句:

先抛出一个问题:写一个脚本,判断当前所用的shell

#!/bin/sh

#注意if的空格以及[]里面的空格这里错了半天啊if [ "$SHELL" = "/bin/bash"];then

echo"your login shell is the bash \n"echo"SHELL is : $SHELL"

elseecho"your login shell is not bash but $SHELL"fi

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

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

#{-n "$var"} : 判断$var变量是否有值

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

[-f "/etc/shadow" ] && echo "This computer uses shadow passwords"

if [ -f "/etc/shadow"];then

echo"电脑密码使用隐藏字符"

elseecho"并没有"fi

#是注释的意思,相关部分已经在里面详细给大家注释解释了,注意if语句的格式

if[];then

elif[];then

else

fi

另外注意if语句还可以简单的用&&与||或语句来代替;另外如果想要深入了解if可以找男人test(在linux遇到问题要学会找男人解决,man)

3.为了让大家更加熟练的运用shell,那么练习下吧,问题:写一个脚本使其从一个文件里面读入有echo的语句,并把其写在本文件末尾;

#!/bin/sh

#-r代表此文件是否可读,具体见man test

mailfolder=/home/handsome/work/linux_learn/shell_learn/readme.txt

#[-r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1;}

#echo"$mailfolder has mail from :"#grep"^echo"$mailfolderif [ -r "$mailfolder"];then

echo"$mailfolder has massage from :"echo| grep '^echo' $mailfolder >>readme2.txt

chmod+r readme2.txt

cat readme2.txt>>$mailfolder

rm-f readme2.txtelseecho"Can not read $mailfolder"touch $mailfolder

chmod+rw $mailfolder

echo"echo 人生自古谁无死,六区蛋清找旱情!" >>$mailfolder

fi

这里由于重定向不能本文见输出到本文件输出,于是我就想了个办法,新建个文件,再重定向到这个文件,大神有别的简单方法可以下面留言拍砖;

4.接下来,我们练习下while的用法,老规矩具体问题来分析;

问题:写一个脚本(不建议使用for变量--for是根据空格取值)

1.设定变量FILE的值为/etc/passwd

2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID什么(Hello,root,your UID is0.)

3.统计一个有多少个用户

#!/bin/bash

fl=/etc/passwd

count=`cat $fl | wc -l`

#下面是一个管道,下面循环读文件中的每一行

cat $fl|

whileread linedouser=`echo $line|awk -F ':' '{print $1}'`

#代表以 :分段$1就是取第1段

uid=`echo $line|awk -F ':' '{print $3}'`

echo"hello, $user Your UID is $uid"done

echo"====User_count:$count===="#前面求得的用户数

这里要注意到awk的用法,可以找linux的男人解决;

5.练习一下for语句吧

问题:写个脚本;

1.切换工作目录至/tmp

2.依次向/tmp目录中的每个文件或子目录问好(Hello,log)

3.统计/tmp目录下共有多个文件,并显示出来

#!/bin/bash

cd /tmp

for i in /tmp/*

do

echo "Hello , $i"

done

count=`ls -l|grep '^-'|wc -l`

echo "====file_count:$count===="

这个问题就相对简单了些,一个for语句就可以搞定,当然可以while搞搞

6.那么问题来了:

question:

传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商

#!/bin/bash

a=$1b=$2[-z $a ] && echo "please \$1 number1" && exit 1[-z $b ] && echo "please \$2 number2" && exit 2[! $# -eq 2 ] && echo "--please num1 num2" && exit 3# $#传递到脚本的参数个数

#-eq相当于=, -ne相当于不等于, -ge >= , -gt >, -le <=, -lt

这里要注意的是,需要传入两个参数;

具体用到的一些知识请看下面:

读到这里大家对上面的小脚本是不是感觉特别easy了,哈哈;

7.写一个脚本;求1到100的和?

#!/bin/bash

sum=0i=1

while [ $i -le 100]dosum=$(($sum +$i))

i=$(($i+1))

done

echo"$sum"

这个脚本就so easy了;

8.接下来,我们写个很实用的脚本吧,假设你现在在机房,你想要看看机房哪些ip在开着,方便咱。。。,是吧。

我们可以 通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线

#!/bin/bashfor i in `seq 2 254`doping-c1 -w1 192.168.51.$i > /dev/null 2>&1#-c可以指定ping的次数,-w测试的时间 -w 1就是1秒中无论成功失败都结束

#-c -w后面都要输入参数所以都要带上l

#$?代表最后命令退出状态,0代表没错,其他代表有错

[ $? -eq 0 ] && echo "192.168.51.$i IP is UP!" || echo "192.168.51.$i IP is down!"done

在这里2>&1代表不显示错误信息,其实就是把错误重定向到标准输出,然后重定向到/dev/null,/dev/null就是个黑洞,写入的任何东西都会丢失,其实简要说就是把正确或错误的输出扔到垃圾桶。

写到这里大家是不是感觉耳目一新呐,哈哈!

随笔练习:还有点bug

#/bin/bash

i=1sum=0#while

while [ $i -le 100]do((sum=sum+i))

((i=i+1))

done

echo $sum

#forsum=0

for ((j=1;j<=100;j++))do((sum=sum+j))

done

echo $sum

#select

select flag in$@do

case $flag in$1)echo $1;;

$2)echo $2;;

$3)echo $3;;

$4)echo $4;;*)echo "input error"

break;;

esac

done

#shift

echo-e "the all arg is\n"

while [ $1]doecho $1shift

done#ifnum=`ls | wc -l`

[ num== 0 ] && echo -e "have no file\n" || echo -e "there are $num files\n"

for file in`ls`doecho"this file $file is"[-f $file ] && echo -e "ordinary file"

if [ -d $file ];then

echo-e "dictionary file";

fi

done

#function

filename=""rename(){

filename=echo `date` | awk -F ' ' '{print $1 $2 $3}'}

rename

echo-e "filename is $filename"[ $? == 0 ] && mkdir $filename || echo -e "have error\n"

xshell脚本简单代码_十分钟学会写shell脚本相关推荐

  1. 十分钟学会写Shell脚本

    大家好!我是Wudu_Eleven,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...

  2. 五分钟包教你学会写Shell脚本

    做 Java 的肯定都接触过 Linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本 ...

  3. shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧

    Linux shell 脚本分享 Shell 是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户,Shell 它是一个用 C 语言编写的程序,它是用户使用 Lin ...

  4. python股票自动买卖视频教程_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  5. java 正则匹配括号是否成对_十分钟学会正则表达式

    正则表达式用处挺广的,主要用于处理字符串. 正则引擎 想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库.主要的正则引擎分为以下两类: DFA 确定性的状态机.不 ...

  6. 我用python做股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  7. python 股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  8. python购买股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

  9. 如何用python选股票_十分钟学会用Python交易股票

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文通过讲述 [单股票均线策略] 在 Ricequant 量化平台的实现,熟悉平台并快速入门.创建自己的量化策略代码 .难易度:入门级.从一下几点说起: ...

最新文章

  1. static构造函数的运行
  2. 解决IDEA中进行maven install报:系统资源不足的问题
  3. 治标不治本:POI Ptg错误的解决方法
  4. Win7/Win8.1升级Win10后屏幕一直闪烁怎么办?
  5. 借助钉钉宜搭,奶茶店开始用黑科技管理门店了
  6. php mail centos_centos怎么发送邮件
  7. java课程设计qq,模块java课程设计报告qq聊天
  8. mysql ubb html,python实现html转ubb代码(html2ubb)
  9. python如何控制伺服驱动_关于伺服电机的21个关键问题
  10. 简述导线平差计算的五个步骤_结点导线如何平差
  11. 基于 element ui 之 ui-tooltip 组件
  12. MacOS Big Sur 开启 HIDPI
  13. Acwing 1299. 五指山
  14. Mac —— QuickTime录屏 声音小解决
  15. 头部姿态估计:《Fine-Grained Head Pose Estimation Without Keypoints》
  16. ROS naviagtion analysis: costmap_2d--Costmap2D
  17. 细则从哈利·波特与来自您好麻雀船长
  18. 禅道配置smtp发信没反应
  19. 阿里云Linux服务器部署JDK8实战教程
  20. 对比Excel两个sheet的数据是否相同

热门文章

  1. 弹道导弹预警仿真系统中弹道构造方法
  2. 中国中小企业年鉴(1996-2018)缺2017、1998-2002
  3. 【献计一刻】如何提高系统分析能力
  4. (影视小程序)最新修复版修复前端独立接口去授权版
  5. arcmap添加字段的类型_ARCGIS之属性表编辑与字段添加
  6. notepad++编译器下载地址
  7. 神奇的拉普拉斯平滑(Laplacian Smoothing)及其在正则化上的应用~
  8. win10下usb-to-serial的驱动问题
  9. Https Http2 Spdy 学习笔记
  10. [51单片机] 免费授权给全世界的单片机教程——吴坚鸿