说明:

本文是关于http://c.biancheng.net/cpp/shell/的相关笔记

shell的两种执行方式
交互式(interactive) 解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。

批处理

(batch)

用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
运行shell脚本的两种方法
作为可执行程序 ./test.sh
作为解释器参数 /bin/bash test.sh

注意:

1.作为可执行程序运行时

一定要写成./test.sh,而不是test.sh。

直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh,

而当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,

要用./test.sh告诉系统说,就在当前目录找。

第一行需写上#!/bin/bash,

“#!”(读shebang) 是一个约定好的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。

通过这种方式运行bash脚本,第一行一定要写对,好让系统查找到正确的解释器。

2.作为解释器参数运行时

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

shell变量
定义变量 变量名=变量值 变量名和等号之间不能有空格
使用变量 ${变量名} 加花括号是为了帮助解释器识别变量的边界
只读变量 readonly 变量名 使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变
删除变量 unset 变量名 变量被删除后不能再次使用,unset命令不能删除只读变量

特殊变量

$n 传递给脚本或函数的参数 n是一个数字,表示第几个参数。例如,当前脚本的文件名是$0,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数  
$* 传递给脚本或函数的所有参数 被双引号(" ")包含时,将所有参数作为一个整体。
$@ 传递给脚本或函数的所有参数 被双引号(" ")包含时,将所有参数分开。
$? 上个命令的退出状态,或函数的返回值  
$$ 当前Shell进程ID  
 #命令行参数:
 #运行脚本时传递给脚本的参数称为命令行参数。
 #命令行参数用$n表示,例如,$1表示第一个参数,$2表示第二个参数,依次类推。
 #$0表示当前脚本的文件名。

 #!/bin/bash

 echo "File Name: $0"
 echo "First Parameter: $1"
 echo "Second Parameter: $2"

 echo "Total Number of Parameters: $#"

 #$*和$@的区别:都表示传递给函数或脚本的所有参数。
 #不被双引号(" ")包含时,都以"$1""$2"…"$n"的形式输出所有参数。
 #被双引号(" ")包含时,
 #"$*"会将所有的参数作为一个整体,以"$1$2…$n"的形式输出所有参数;
 #"$@"会将各个参数分开,以"$1""$2"…"$n"的形式输出所有参数。

 echo "Quoted Values: "
 echo "\$*="$*
 echo "\$@="$@
 echo "\"\$*\"=""$*"
 echo "\"\$@\"=""$@"
 echo "print each param from \$*"
 for var in $*
 do
     echo "${var}"
 done
 echo "print each param from \$@"
 for var in $@
 do
     echo "${var}"
 done
 echo "print each param from \"\$*\""
 for var in "$*"
 do
     echo "${var}"
 done
 echo "print each param from \"\$@\""
 for var in "$@"
 do
     echo "${var}"
 done
 echo "print each param from \$@"
 for var in $@
 do
     echo "${var}"
 done
 echo "print each param from \"\$*\""
 for var in "$*"
 do
     echo "${var}"
 done
 echo "print each param from \"\$@\""
 for var in "$@"
 do
     echo "${var}"
 done

 #$?可以获取上一个命令的退出状态。
 #所谓退出状态,就是上一个命令执行后的返回结果。
 #退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1。
 #不过,也有一些命令返回其他值,表示不同类型的错误。
 #$?也可以表示函数的返回值。
 echo "Return Value of the Previous Command: $?"

 #$$表示当前Shell进程的ID,即pid。
 echo "Current Shell Process ID: $$"

命令行参数

shell替换

如果表达式中包含特殊字符,Shell将会进行替换。

例如,在双引号中使用变量就是一种变量替换,转义字符也是一种替换,还有命令替换。

注:

echo默认不转义,也可以使用-E选项禁止转义,可以使用-e选项支持转义。

echo默认插入换行符,可以使用-n选项禁止插入换行符。

 #命令替换:
 #shell可以先执行命令,将执行结果暂时保存,在适当的地方输出。
 #语法:
 #`command`

 #!/bin/bash

 #date显示当前时间
 DATE=`date`
 echo "Date is ${DATE}"

 #who显示目前登入系统的用户信息
 #|管道符号 ,上个命令的输出作为下个命令的输入
 #wc -l显示行数
 USERS=`who | wc -l`
 echo "Number of the logged in users is ${USERS}"

 #uptime查看系统负载,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多>少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载
 #命令间用换行符或者;分隔
 UP=`date;uptime`
 echo "Uptime is ${UP}"

命令替换

变量替换

变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

可以使用的变量替换形式:

${var} 变量本来的值。
${var:-word} 如果变量var为空或已被删除(unset),那么返回word,但不改变var的值。
${var:=word} 如果变量var为空或已被删除(unset),那么返回word,并将var的值设置为 word。
${var:+word} 如果变量var被定义,那么返回word,但不改变var的值。
${var:?message} 如果变量var为空或已被删除(unset),那么将消息message送到标准错误输出,可以用来检测变量var是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
 #!/bin/bash

 echo ${var:-"Variable is not set"}
 echo "1-Value of var is ${var}"

 echo ${var:="Variable is not set"}
 echo "2-Value of var is ${var}"

 unset var
 echo ${var:+"This is a default value"}
 echo "3-Value of var is ${var}"

 var="prefix"
 echo ${var:+"This is a default value"}
 echo "4-Value of var is ${var}"

 echo ${var:?"Print this message"}
 echo "5-Value of var is ${var}"

 unset var
 echo ${var:?"Print this message"}
 echo "6-Value of var is ${var}"

变量替换

shell入门笔记1:执行方式、运行方式、变量、替换的更多相关文章

  1. shell编程系列1--shell脚本中的变量替换

    shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...

  2. shell入门笔记2:字符串、数组、echo与printf

    说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...

  3. python执行方式及变量

    .python执行方式 (1)交互式:调试方便,无法保存代码 (2)命令行方式:可以永久保存代码 (3)python执行阶段 先启动python解释器,解释器像文本编辑器一样将文件内容从硬盘读到内存, ...

  4. 第三篇 Python执行方式和变量初始

    第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是  .py 两种python程 ...

  5. shell脚本4种执行方式

    Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行. 首先,看下我们的脚本内容 [tan@tan scripts]$ ll total -r ...

  6. Python入门笔记(22):Python函数(5):变量作用域与闭包

    一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...

  7. 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等

    1.env显示当前的环境变量 2.PS1='[\u@\h \w \A] \$' 可以设置bash的命令与提示符. 3.echo $$ 显示当前bash的PID号 4.echo $?显示上一条指令的回传 ...

  8. Shell 入门笔记(一)

    Shell简介 在开发过程中Linux系统经常接触和使用的,Shell 是我们用户使用 Linux 的桥梁,是C 语言编写的程序.Shell 是一种命令语言,同时一种程序设计语言.对大多数开发人员来说 ...

  9. shell脚本的常用执行方式

    1.sh+脚本的相对路径 [jinghang@hadoop101 datas]$ sh helloworld.sh helloworld sh+脚本的绝对路径 [jinghang@hadoop101 ...

随机推荐

  1. cuda事件的使用

    cudaEvent_t start,stop; cudaEventCreate(&start);//创建事件 cudaEventCreate(&stop); cudaEventReco ...

  2. session的使用

    一.什么是session? Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时, ...

  3. MyBatis 源码分析——映射结果

    MyBatis最后一步一定是处理相关的结果——把数据映射成对应的模型对象.事实上在笔者看来如果读者们了解了mybatis如何去执行数据库,又是如何处理数据结果.那么就了解了mybatis的主要路线.因 ...

  4. iOS--通过MOB平台实现第三方登录与分享

     适合刚开始接触第三方登录与分享的IOS小白!! 这两天看了一下有关IOS第三方登录与分享的一些知识,发现在QQ开放平台与微信开放平台实现这些功能很繁琐,不容易实现,在导师的推荐下,找到了这样一个平台 ...

  5. Maven项目搭建(二):Maven搭建SSM框架

    上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...

  6. Javascript 闭包访问问题?

    function pfajax(paradata){ $.ajax({ data : paradata.dat, type : paradata.method, async: false, url : ...

  7. 顺序线性表之大整数求和C++

    顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...

  8. VSCode里的一些有用的插件

    1.EaseServer 作用:开启本地 http server,然后在browser里打开html: 在调试页面的时候,打开页面比较方便,不需要先开启server,再打开html 2.Debugge ...

  9. 老李分享:网页爬虫java实现

    老李分享:网页爬虫java实现   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...

  10. 在centOS7.2安装配置zabbix监控

    zabbix由两部分组成,zabbix-server与可选的zabbix-agent.zabbix-server可以通过SNMP,ZABBIX-AGENT,PING,端口监视等方法提供对远程服务器/网 ...