Linux Shell脚本编写——构建基本脚本(一)
来源:互联网 发布:ubuntu 16 搜狗 编辑:程序博客网 时间:2024/05/07 21:14
创建shell脚本
在创建shell脚本文件,必须在文件的第一行指定要使用的shell,其格式为:
#!/bin/bash
创建、执行sh脚本
代码1-1
root@lejian:/data# cat demo1 #/bin/bashdatewhoroot@lejian:/data# ls -ltotal 4-rw-r--r-- 1 root root 21 Dec 1 13:59 demo1root@lejian:/data# chmod u+x demo1 root@lejian:/data# ls -ltotal 4-rwxr--r-- 1 root root 21 Dec 1 13:59 demo1root@lejian:/data# ./demo1 Thu Dec 1 14:03:57 CST 2016root pts/0 2016-12-01 13:34 (110.86.16.210)
代码1-1中,chmod u+x demo1 为修改demo1文件权限使其可执行
如果想在同一行显示一个文本字符串和一个命令的输出,可以用echo语句的-n参数,date必须换行,否则将不会打印日期还是打印date
代码1-2
root@lejian:/data# cat demo2 #!/bin/bashecho -n "The time and date are:"datewhoroot@lejian:/data# ./demo2 The time and date are:Thu Dec 1 20:06:19 CST 2016root pts/0 2016-12-01 19:59 (122.90.139.156)
使用环境变量,和转义美元$符号,如果要打印美元$需要进行转义,否则有可能打印为空或其他已定义的环境变量
代码1-3
root@lejian:/data# cat demo4 #!/bin/bashecho "User info for userid:$USER"echo "UID:$UID"echo "HOME:$HOME"echo "The cost of item is $15"echo "The cost of item is \$15"root@lejian:/data# ./demo4 User info for userid:rootUID:0HOME:/rootThe cost of item is 5The cost of item is $15
用户变量
除了环境变量,shell脚本还允许在脚本中定义和使用自己的变量,定义变量允许临时存储数据并在整个脚本中使用
代码1-4
root@lejian:/data# cat demo5 #!/bin/bashdays=19guest="Tom"echo "$guest checked in $days days ago"days=25guest="Amy"echo "$guest checked in $days days ago"customer=$guestecho "The customer is $customer"root@lejian:/data# ./demo5 Tom checked in 19 days agoAmy checked in 25 days agoThe customer is Amy
反引号
shell脚本中反引号允许将shell命令的输出赋给变量
testing=`date`代码1-5root@lejian:/data# cat demo6 #!/bin/bashtesting=`date`echo "$testing"today=`date +%Y-%m-%d`echo "now is $today"today=`date +%H:%M:%S`echo "now is $today"today=`date "+%Y-%m-%d %H:%M:%S"`echo "now is $today"tomorrow=`date -d tomorrow "+%Y-%m-%d %H:%M:%S"`echo "tomorrow is $tomorrow"yesterday=`date -d yesterday "+%Y-%m-%d %H:%M:%S"`echo "yesterday is $yesterday"root@lejian:/data# ./demo6 Thu Dec 1 20:45:05 CST 2016now is 2016-12-01now is 20:45:05now is 2016-12-01 20:45:05tomorrow is 2016-12-02 20:45:05yesterday is 2016-11-30 20:45:05
输出重定向
将命令的输出发送到一个文件中,bash shell采用(>)完成输出重定向,采用(>>)完成追加输出重定向
代码1-6
root@lejian:/data# date > demo7root@lejian:/data# cat demo7 Thu Dec 1 20:52:09 CST 2016root@lejian:/data# who > demo7 root@lejian:/data# cat demo7 root pts/0 2016-12-01 19:59 (122.90.139.156)root@lejian:/data# date >> demo7 root@lejian:/data# cat demo7 root pts/0 2016-12-01 19:59 (122.90.139.156)Thu Dec 1 20:52:32 CST 2016
输入重定向
将文件的内容重定向到命令,输入重定向的符号(<),内联输入重定向符号是双小于号(<<),除了这个符号,必须指定一个文件标记来划分输入数据的开始和结尾
wc命令是用来打印文件的文本行数、单词数、字节数等默认输出三个值
代码1-7
root@lejian:/data# wc <<EOF> Java> PHP> Python> EOF 3 3 16
管道
有时需要发送某个命令的输出作为另一个命令的输入
代码1-8
root@lejian:/data# cat demo9 hello Javahello Springhello MybatisPHP is the best language in the worldJava is the best language in the worldroot@lejian:/data# cat demo9 | grep Javahello JavaJava is the best language in the world
expr命令允许在命令上上处理数学表达式(注:数字和运算符必须有空格分隔),一些有特殊含义的符号(例如星号),可加上反斜杠转义
代码1-9
root@lejian:/data# expr 1 + 56root@lejian:/data# expr 1 - 5-4root@lejian:/data# expr 1 * 5expr: syntax errorroot@lejian:/data# expr 1 \* 55root@lejian:/data# expr 1 / 50
将一个算术运算式的结果赋给一个变量,需要用引号括起来
代码1-10
root@lejian:/data# cat demo1 #!/bin/bashval1=20val2=10val3=`expr $val1 / $val2`echo "The result is $val3"root@lejian:/data# ./demo1 The result is 2
使用方括号计算
代码1-11root@lejian:/data# val1=$[1+5]root@lejian:/data# echo $val16root@lejian:/data# val2=$[$val1+10]root@lejian:/data# echo $val216root@lejian:/data# cat demo2 #!/bin/bashval1=5val2=8val3=9val4=1val5=10val6=2val=$[val1+(val2-val3)+val4*val5+val6]echo "The result is $val"root@lejian:/data# ./demo2 The result is 16
bc计算机允许在命令行输入浮点表达式、解释表达式、计算并返回结果,bc计算器能识别:
- 数字(整数和浮点数)
- 变量(简单变量和数组)
- 注释(以#开始的行或C语言的/**/)
- 表达式
- 编程语句(if-then)
- 函数
代码1-12
root@lejian:/data# bcbc 1.06.95Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY.For details type `warranty'. 9.1+11.220.38.1+9.918.0quit
使用-q可以去掉提示语
代码1-13
root@lejian:/data# bc -q3/50scale=33/5.600val1=10val2=6val1*val260val3=val1+val2print val316quit
脚本中使用bc
代码1-14
root@lejian:/data# cat demo3 #!/bin/bashval1=`echo "scale=3;3/6" | bc`echo "The result is $val1"root@lejian:/data# ./demo3 The result is .500
查看退出状态码
Linux提供$?变量来保存上个执行命令的退出状态码
代码1-15root@lejian:/data# dateFri Dec 2 04:57:24 CST 2016root@lejian:/data# echo $?0root@lejian:/data# aaaNo command 'aaa' found, did you mean: Command 'aha' from package 'aha' (universe) Command 'aa' from package 'astronomical-almanac' (universe) Command 'ara' from package 'ara' (universe) Command 'jaaa' from package 'jaaa' (universe)aaa: command not foundroot@lejian:/data# echo $?127
exit退出命令可以指定退出状态码,但不能超过255,否则会取模
代码1-16root@lejian:/data# cat demo4 #!/bin/bashdateecho $?whoexit 5root@lejian:/data# ./demo4 Fri Dec 2 05:03:08 CST 20160root pts/0 2016-12-02 04:39 (122.91.222.126)root@lejian:/data# echo $?5
0 0
- Linux Shell脚本编写——构建基本脚本(一)
- 学习 shell —— 编写基本脚本
- linux shell脚本学习笔记一 脚本文件的构建
- Linux Shell脚本编写
- Linux shell 脚本 编写
- shell脚本编写实例一
- shell脚本编写(一)
- 使用BASH编写Linux Shell脚本——前言
- Linux——利用Shell脚本编写进度条
- linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Linux shell脚本编写基础
- Java 问题集锦
- GIT第二讲 基本操作流程和常用命令
- GIS集成润乾统计图之后台获取统计图二进制流生成图片
- 润乾在东方通tongweb5.0上部署手册
- windows下xgboost 安装教程
- Linux Shell脚本编写——构建基本脚本(一)
- 对于语文不好的我,标题真的难到我了
- 代码动态设置imageview的背景的时候不起作用
- C#反射
- 游戏开发电子书(PDF)下载分享
- GIT第三讲 四种文件状态和索引
- 第十四周【项目三- 二叉树排序】
- Android性能优化-使用SparseArray|ArrayMap替代HashMap
- 深入编辑器