Linux入门第五天——shell脚本入门(上)基本概念
一、什么是shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
二、shell入门
1.先导知识
变量知识补充:https://www.cnblogs.com/jonathanlin/p/4063205.html
必备先导知识:###来自鸟哥私房菜
1. 指令的执行是从上而下、从左而右的分析与执行;
2. 指令的下达就如同第四章内提到的: 指令、选项与参数间的多个空白都会被忽略掉;
3. 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;
4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;
5. 至于如果一行的内容太多,则可以使用“ [Enter] ”来延伸至下一行;
6. “ # ”可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略!
常见执行脚本的方法:
chmod +x ./test.sh #使脚本具有执行权限
绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;
相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来执行 ###如果直接写shell.sh需要PATH中包含此目录!
变量“PATH”功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
使用set命令可以查看所有变量
2.第一个shell script——hello world
#!/bin/bash
# my first shell script
echo "hello world"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
# 是注释的标记
最后一行为正文
依次使用以下指令:

// 复习 chmod的使用!
在介绍完hello world后,分享鸟哥的shell编写建议:——类似编程规范,请尽量遵守!
另外,在一些环境的设置上面,毕竟每个人的环境都不相同,为了取得较佳的执行环境, 我
都会自行先定义好一些一定会被用到的环境变量,例如 PATH 这个玩意儿! 这样比较好啦~
所以说,建议你一定要养成良好的 script 撰写习惯,在每个 script 的文件开始处记录好:
script 的功能;
script 的版本信息;
script 的作者与联络方式;
script 的版权宣告方式;
script 的 History (历史纪录);
script 内较特殊的指令,使用“绝对路径”的方式来下达;
script 运行时需要的环境变量预先宣告与设置。
TIPS:sh文件后缀并不是必须的(前面我们有提到过linux不以后缀区分文件类型),只是习惯上,我们以sh为后缀!
#!/bin/bash
# Program:
# This program shows the user's choice
# History:
# // VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
三、shell练习
1.对谈式脚本——read命令的使用:read
由用户输入first name与 last name,程序输出 full name
#!/bin/bash
#function:
# input first-name and last-name,output the full-name
#author:
# zcc on //
read -p "please input your first name" firstname
read -p "please input your last name" lastname
echo -e "your first name is ${firstname} ,last name is ${lastname}"
执行:
root@ccc:/tmp# chmod +x showname.sh
root@ccc:/tmp# ./showname.sh
please input your first namejiangbei
please input your last namez
your first name is jiangbei ,last name is z
2.日期式脚本——date的使用:date
由用户输入文件名,创建3个文件,文件名为用户输入+近3天日期
vim create_3_filename.sh
#头部省略,请自行思考如何补充(包括使用规范)
read -p "please input the filename:" fileuser
#use the var syntax
filename=${fileuser:-"filename"}
date1=$(date -d "+1 day" +%Y%m%d)
date2=$(date +%Y%m%d)
date3=$(date -d "-1 day" +%Y%m%d) file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3} touch "${file1}"
touch "${file2}"
touch "${file3}"
chmod u+x create_3_filename.sh
复习之前变量的用法,例如使用$()等!
执行结果如下:

3.数值运算
更多数值计算,参考:http://www.mamicode.com/info-detail-1324934.html
输入两个数,输出相加结果:
#!/bin/bash
#function:
# add numbers
#author:
# jiangbei on //
read -p "input the first number:" first
read -p "input the second number:" second
total=$((${first}+${second}))
echo -e "the total is ${total}"
其他与上文重复过程省略,基本上,数值运算可以使用以下两种方式:
declare -i total=${firstnu}*${secnu}
var=$((运算内容)) ###注意为两个括号!
当然,以上只是整数运算,如果需要支持小数,可以通过bc来进行:
echo "123.123*55.9" | bc
补充:脚本执行方式的差异
有了一点脚本的基础后,我们来看执行方式的差异:
当使用前一小节提到的直接指令下达 (不论是绝对路径/相对路径还是 ${PATH} 内),或者是
利用 bash (或 sh) 来下达脚本时, 该 script 都会使用一个新的 bash 环境来执行脚本内的
指令!也就是说,使用这种执行方式时, 其实 script 是在子程序的 bash 内执行的!我们在
第十章 BASH 内谈到 export 的功能时,曾经就父程序/子程序谈过一些概念性的问题, 重点
在于:“当子程序完成后,在子程序内的各项变量或动作将会结束而不会传回到父程序中”!
所以,之前的./xx.sh是另外起的一支子程序,其中的数据在执行结束后将会被抹去,如果想要保留,可以通过以下的方式:
使用 source命令:source showname.sh
showname.sh
会在父程序中执行的,因此各项动作都会在原本的 bash 内生效!
这也是为啥你不登出系统而要让某些写入 ~/.bashrc 的设置生效时,
需要使用“ source ~/.bashrc ”而不能使用“ bash ~/.bashrc ”是一样的啊!
更多请参考:http://blog.csdn.net/violet_echo_0908/article/details/52056071
四、shell数据类型
支持整形、字符串以及一维数组
#字符串,单双引号见参考链接
your_name='qinjx'
#数组
array_name=(value0 value1 value2 value3)
#数组的下标可以不连续,shell属于弱类型
array_name[]=value0
array_name[]=value1
array_name[n]=valuen
完整介绍,参考菜鸟教程:http://www.runoob.com/linux/linux-shell-variable.html
更多数据类型介绍,参考:http://blog.csdn.net/a1055186977/article/details/71402758
Linux入门第五天——shell脚本入门(上)基本概念的更多相关文章
- Linux入门第五天——shell脚本入门(下)基础语法之调试debug
一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...
- Linux入门第五天——shell脚本入门(下)基础语法之循环
一.循环 1.不定循环 有两种形式: while [ condition ] <==中括号内的状态就是判断式 do <==do 是循环的开始! 程序段落 done <==done 是 ...
- Linux入门第五天——shell脚本入门(中)基础语法之判断与条件
一.判断式 利用 test 命令进行执行结果的判断(例如判断是否存在该文件):关于test test:test 示例:结合回传值 $? 进行判断:关于$?:$? [root@localhost tm ...
- Linux入门第四天——shell基础
一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- linux的shell脚本入门
Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- 【shell】shell脚本入门
1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...
- Linux学习Day6:编写Shell脚本
Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...
随机推荐
- Python 处理脚本的命令行参数-getopt
# -*- coding:utf-8 -*- import sys def test(): """ 参数列表:sys.argv 参数个数:len(sys.argv) 脚本 ...
- 配置 Tomcat 服务 和 自启动
如果我们使用war 包进行部署项目的时候,需要把包放进Tomcat的目录下,为了使我们的服务能够在服务器重启的时候自动启动起来,我们需要把Tomcat设置成自起服务. 配置 Tomcat 服务 新建服 ...
- 一次xss的黑盒挖掘和利用过程
挖掘过程一: 自从上一次投稿,已经好久好久没写文章了.今天就着吃饭的时间,写篇文章,记录下自己学习xss这么久的心得.在我看来.Xss就是javascript注入,你可以在js语法规定的范畴内做任何事 ...
- Spring+ehcache+redis两级缓存
问题描述 场景:我们的应用系统是分布式集群的,可横向扩展的.应用中某个接口操作满足以下一个或多个条件: 1. 接口运行复杂代价大, 2. 接口返回数据量大, 3. 接口的数据基本不会更改, 4. 接口 ...
- luogu P2742 【模板】二维凸包
嘟嘟嘟 没错,我开始学凸包了. 其实挺简单的. 前置技能: 1.极坐标系 2.向量叉积 1.极坐标系 就是一种二维坐标系.只不过两个坐标分别表示向量和极轴的角度和自身的长度.对于不同的问题,极轴可以自 ...
- 接口测试Jmeter+Fiddler组合
接口测试Jmeter+Fiddler组合 在使用完Jmeter在做接口测试之后,个人感觉Jmeter比loadrunner好用,原因是界面操作更加直观,不必像loadrunner在写接口请求函数的时候 ...
- Python中获取异常(try Exception)信息
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置. 这里获取异常(Exception)信息采用try...except...程序结构.如下所示: try: ... exce ...
- 一个实现 手机端“输入验证码 ”效果Demo
之前在“掘金”上看到这样一个demo 我觉得很有意思,于是今天把它搬下来,记在自己的“小本本”里也许会对以后的项目有点用,若要自己去实现这样一个案例也能实现,但是可能没有那么“妙”. 想法: 1.使用 ...
- Ajax+PHP实现异步图片上传
1.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- Intellij IDEA 2018.2.2 SpringBoot热启动 (Maven)
一.IDEA 工具配置 1. 打开IDEA 设置界面,选择编译,按图打勾. 2 . 然后 Shift+Ctrl+Alt+/,选择Registry 3 . compiler.automake.allow ...