shell 脚本初习
一、第一个shell脚本
[root@www ~]# cat hello.sh
#!/bin/bash
##The first shell script
##2014-11-03
echo "Hello World,welcome you"
echo `date +%Y-%m-%d`
echo `date +%H:%M:%S`
执行这个脚本的方法
[root@www ~]#sh hello.sh //直接sh 后面加脚本名称
Hello World,welcome you
2014-11-03
09:58:24
[root@www ~]#./hello.sh
-bash: ./hello.sh: 权限不够
[root@www ~]# chmod +x hello.sh //加可执行权限 ./为当前目录
[root@www ~]# ./hello.sh
Hello World,welcome you
2014-11-03
10:01:25
******************************************************************************
二、第二个shell脚本
[root@www ~]# cat sum.sh //这个脚本是一个普通的求和
#!/bin/bash
a=3
b=4
sum=$[$a+$b]
echo "两个数相加是 $a+$b=$sum "
[root@www ~]# sh sum.sh
两个数相加是 3+4=7
******************************************************************************
三、第三个脚本
[root@www ~]# cat date.sh //打印出系统当前时间,sleep是系统命令挂起一段时间的意思
#!/bin/bash
#This a date script
#huqiang
#2014-11-3
j=`date +%H:%M:%S`
echo "现在的时间是: $j."
sleep 2
d=`date +%H:%M:%S`
echo "停留两秒后的时间是:$d."
[root@www ~]# sh date.sh
现在的时间是: 10:06:26.
停留两秒后的时间是:10:06:28.
******************************************************************************
四、第四个shell脚本
[root@www ~]# cat start.sh
#!/bin/bash
n=$[$1+$2]
echo "$1+$2=$n"
echo "$1 $2 $0"
[root@www ~]# sh start.sh 4 5
4+5=9
4 5 start.sh
这种一般用在启动服务时后面跟的命令/etc/init.d/mysqld start $1 $2都是系统预设的 $0则是打开这个命令本身
******************************************************************************
五、第五个shell脚本
[root@www ~]# cat read.sh
#!/bin/bash
read -p "请输入一个数字 > " x
read -p "再输入一个数 > " y
sum=$[$x+$y]
echo "这两个数的和是: $sum"
[root@www ~]# sh read.sh
请输入一个数字 > 80
再输入一个数 > 80
这两个数的和是: 160
read命令用于和用户进行交互
******************************************************************************
六、第六个shell脚本
[root@www ~]# cat if.sh
#!/bin/bash
read -p "Please input your score: " a
if ((a<60)); then
echo "You didn't pass the exam."
fi
[root@www ~]# sh if.sh
Please input your score: 45
You didn't pass the exam.
我们在写脚本时学用到if逻辑判断语句来减少我们的工作量,这个脚本意思是当a<60,打印出你的成绩说不及格,如果输入一个大于60的数则不会出结果
if函数的格式是:if 条件; then
echo 满足则输出
fi
[root@www ~]# cat if1.sh
#!/bin/bash
read -p "输入你的成绩:" x
if (( x<60)); then
echo "差了点,继续努力"
else
echo "恭喜,及格了"
fi
[root@www ~]# sh if1.sh
输入你的成绩:70
恭喜,及格了
[root@www ~]# sh if.sh
输入你的成绩:50
差了点,继续努力
这里加了一个else 意思是如果你不满足上面一个条件则输出下面这个结果
if函数的格式是:if 条件; then
echo 满足则输出
else 不满足上面的条件则输出
fi
[root@www ~]# cat if2.sh
#!/bin/bash
read -p "输入你的成绩:" x
if ((x<60)); then
echo "差了点,继续努力"
elif ((x>=60)) && ((x<85)); then
echo "及格了"
else
echo "非常棒"
fi
[root@www ~]# sh if2.sh
输入你的成绩:70
及格了
[root@www ~]# sh if2.sh
输入你的成绩:59
差了点,继续努力
[root@www ~]# sh if2.sh
输入你的成绩:90
非常棒
这里加了一个elif 意思是多了一个if判断,如果你不满足第一个条件则继续执行第二个判断,如果还不满足则输出最后一个结果
if函数的格式是:if 条件; then
echo 满足则输出
elif 条件2 ( && || )并且与或者的意思 ; then
echo 不满足第一个条件则输出
else 不满足上面两个条件则输出
fi
以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用 (( )) 的形式外,还可以使用 [ ] 但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)
[root@www ~]# cat if3.sh
#!/bin/bash
read -p "输入你的成绩 " y
if [ $y -lt 60 ]; then
echo "no pass"
elif [ $y -ge 60 ] && [ $y -lt 80 ]; then
echo "pass"
else
echo "exce"
fi
[root@www ~]# sh if3.sh
输入你的成绩 45
no pass
[root@www ~]# sh if3.sh
输入你的成绩 70
pass
[root@www ~]# sh if3.sh
输入你的成绩 90
exce
要注意的是空格
*************************************************************************
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为:
if [ -e filename ] ; then
-e参数
[root@www ~]# cat e.sh
#!/bin/bash
if [ -e /root/a ]; then
echo "The existence of"
else
echo "no exist"
fi
[root@www ~]# sh e.sh
no exist
[root@www ~]# mkdir a
[root@www ~]# sh e.sh
The existence of
-f参数
[root@www ~]# cat f.sh
#!/bin/bash
if [ -f /root/f ]; then
echo "存在且是普通文件"
else
echo "不存在这个文件"
fi
[root@www ~]# sh f.sh
不存在这个文件
[root@www ~]# touch f
[root@www ~]# sh f.sh
存在且是普通文件
-x参数
[root@www ~]# cat x.sh
#!/bin/bash
if [ -x file ]; then
echo "可执行文件"
else
echo "不可执行文件"
fi
[root@www ~]# touch file
[root@www ~]# sh x.sh
不可执行文件
[root@www ~]# chmod +x /root/file
[root@www ~]# sh x.sh
可执行文件
加-参数后需要首先满足对的这个条件,然后才能else不对的这个条件
if的用户首先要满足前面一个条件是对的,后面才能继续跟下一个对的条件
在shell 脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是case了。具体格式为:
case 变量 in value1)command;; value2)command;; value3)command;; *)command;; esac
上面的结构中,不限制value的个数, * 则代表除了上面的value外的其他值。
[root@www ~]# cat case.sh
#!/bin/bash
read -p "输入一个数: " n
a=$[$n%2]
case $a in
1)
echo "这是一个奇数"
;;
0)
echo "这是一个偶数"
;;
*)
echo "这不是一个数"
;;
esac
[root@www ~]# sh case.sh
输入一个数: 3
这是一个奇数
[root@www ~]# sh case.sh
输入一个数: 100
这是一个偶数
[root@www ~]# sh case.sh
输入一个数: -8
这是一个偶数
[root@www ~]# sh case.sh
输入一个数: -1
这不是一个数
case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了
转载于:https://blog.51cto.com/shansongxian/1571141
shell 脚本初习相关推荐
- shell脚本报错:[: =: unary operator expected
shell脚本报错:"[:=:unaryoperatorexpected" 在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == "OK" ...
- ubuntu终端执行shell脚本报command not found解决方法
ubuntu终端执行shell脚本报command not found解决方法 参考文章: (1)ubuntu终端执行shell脚本报command not found解决方法 (2)https:// ...
- 通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点
标题很长:通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点 不过目前从oozie调度测试的例子来看,oozie本身的retry好像并没有参数可以控制跳过失败的节 ...
- linux 简单脚本fi报错,shell脚本报错:[: =: unary operator expected
shell脚本报错:"[: =: unary operator expected" 在匹配字符串相等时,我用了类似这样的语句: if [ $STATUS == "OK&q ...
- 运行shell脚本报错:“syntax error near unexpected token 的解决方法”
运行shell脚本报错:"syntax error near unexpected token 的解决方法" 今天写了个Cshell脚本,运行报错syntax error near ...
- 免费学python的软件-此贴告诉你:为啥shell脚本人,不建议学python
------[1在linux安装powershell,并不是难题]------ 无需编译,一键安装powershell: centos7及以上,安装powershell: curl -o /etc/y ...
- Linux shell 脚本报错:/bin/bash^M: bad interpreter: No such file or directory
今天遇到一个很诡异的问题,一直运行很正常的shell脚本失败了,只是昨天增加了一个参数而已. 报错信息: /bin/bash^M: bad interpreter: No such file or d ...
- [Shell 脚本] 备份数据库文件至OSS服务(纯shell脚本无sdk)
背景: 凡事使用服务器搭建的网站就需要定时备份网站数据,常见的方法是打包网站目录,然后备份到FTP服务器上等.也有通过OSS SDK把备份的网站文件上传到OSS服务器上,但是通过SDK来实现,需要一定 ...
- CRLF line terminators导致shell脚本报错:command not found
Linux和Windows文本文件的行结束标志不同.在Linux中,文本文 件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行.有时候在Win ...
最新文章
- ajax使用教程_AJAX教程:什么是AJAX以及如何使用它
- C#中适当的列表支持
- 完美的xslt数值函数与字符串函数
- Shell编程之条件判断
- 稳定币usda是哪个发行的_usdt稳定币是谁发行的?
- vim 快捷键大全和插件大全
- MATLAB学习笔记 imagesc函数使用
- Nvivo的使用学习
- 二维绕任意点旋转_旋转变换(一)旋转矩阵
- 结构化、半结构化、非结构化数据
- Xilinx FPGA时钟及I/O接口规划(二)
- vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用
- 关于qqv8.8.17版如何关闭QQ看点
- 印光法师:《灵岩遗旨》壹、悲化有情
- 音乐对计算机专业的影响,计算机网络技术对音乐发展的影响探讨
- JS 键盘事件、触摸事件
- 计算机图形学复习(自用)
- 用java的事件监听机制实现一个简单的画板应用:通过选择图形按钮和颜色按钮来画出自己想画的图形:直线、空心矩形、圆形、折线、多边形、圆角矩形、弧线、曲线、喷枪
- 电信“我的e家”手机无线上网
- 监控与性能分析系列:2)netstat、ss对比使用
热门文章
- 无人车企哪家强?通用第一Waymo第二,苹果特斯拉进黑榜
- 在硅谷谈AI不够有创意,到苹果开吐槽大会 | 跟着李开复去硅谷
- 谷歌再推AI开源平台AI·ON,你有机会参与Bengio的项目了
- 联想高校AI精英挑战赛再下一城,10项目逐鹿华中科大,智能大数据平台夺冠
- java中53个关键字的意义及使用方法
- tomcat 之 tomcat实例配置
- YUV格式文件转RGB格式
- android apk 防止反编译技术加壳技术(转)
- SharePoint 2013 对二进制大型对象(BLOB)进行爬网
- Kubernetes Node Controller源码分析之配置篇