当前位置: 首页 > news >正文

《shell编程实战》第4章shell变量进阶(上)

1、位置变量
(1)$0 ==>取文件名
[root@thzzc1994 ~]# cat test.sh
echo $0
[root@thzzc1994 ~]# sh test.sh
test.sh
[root@thzzc1994 ~]# sh ~/test.sh
/root/test.sh
说明:执行脚本时脚本名字前面有路径则$0输出路径。前面有路径则要输出路径。也可用命令dirname和basename取值。
(2)$#和$n
$# ==>取参数的个数
说明:""里只能算一个变量,这里设置三个变量先。
[root@thzzc1994 ~]# set -- "I am" ugly oldboy
[root@thzzc1994 ~]# echo $#
3
[root@thzzc1994 ~]# echo $1
I am
[root@thzzc1994 ~]# echo $2
ugly
[root@thzzc1994 ~]# echo $3br/>oldboy
(3)$*与$@的区别
[root@thzzc1994 ~]# echo $
I am ugly oldboy
[root@thzzc1994 ~]# echo $@
I am ugly oldboy
[root@thzzc1994 ~]# for i in "$
";do echo $i;done
I am ugly oldboy ==>可知$*就只有一个参数
[root@thzzc1994 ~]# for i in "$@";do echo $i;done
I am
ugly
oldboy ==>$@有四个参数
2、进程状态变量
(1)$? 0为成功,非0为失败
[root@thzzc1994 ~]# date
2018年 05月 01日 星期二 18:58:42 CST
[root@thzzc1994 ~]# echo $?
0
[root@thzzc1994 ~]# rm /
rm: 无法删除"/": 是一个目录
[root@thzzc1994 ~]# echo $?
1
在企业场景中,$?返回值的用法如下:
①判断命令、脚本或函数等程序是否执行成功
②在脚本中调用exit n,会返回这个数字给$?。
③在函数里,通过return n把这个数字以函数返回值给$?。
(2)$$ 获取进程号
验证方法①:[root@thzzc1994 ~]# cat testPid.sh
echo $$
[root@thzzc1994 ~]# sh testPid.sh &
[3] 3357
[root@thzzc1994 ~]# 3357

[3]+ Done sh testPid.sh
②(推荐):[root@thzzc1994 ~]# su - thzzc
[thzzc@thzzc1994 ~]$ echo $$
2544
[thzzc@thzzc1994 ~]$ kill -9 2544
[root@thzzc1994 ~]#
(3)$ 上个命令的最后一个参数(不止参数,命令也一样,应该是单词就行)
[root@thzzc1994 ~]# echo && echo $

echo
[root@thzzc1994 ~]# echo kobe && echo $
kobe
kobe
(4)$! 获取上个脚本的进程号
[root@thzzc1994 ~]# cat testPid.sh
sleep 100
[root@thzzc1994 ~]# ps -ef |grep testPid
root 6557 6311 0 15:48 pts/0 00:00:00 grep testPid
[root@thzzc1994 ~]# sh testPid.sh &
[1] 6558
[root@thzzc1994 ~]# echo $!
6558
总结:位置变量$0 $n $# $* $@ 5个和进程变量$$ $! $? $
4个,都记下来会对shell编程有很大帮助。

转载于:https://blog.51cto.com/10249069/2118442

相关文章:

  • 批量实现多台服务器之间ssh无密码登录的相互信任关系
  • 与Bob McWhirter的问答:WildFly Swarm更名为Thorntail项目
  • AsyncTask实现原理
  • 最简单的无缝轮播
  • c中perror函数
  • 小身材超能量Oracle新一代数据库机帮助所有规模企业迈向云端
  • Confluence 6 注册单一小工具
  • Redis分布式锁的try-with-resources实现
  • shell脚本案例(五)利用nmap批量扫描存活主机
  • Echarts关于仪表盘
  • mysql 查询当天、本周,本月,上一个月的数据---https://www.cnblogs.com/benefitworld/p/5832897.html...
  • php实现求数组中出现次数超过一半的数字(isset($arr[$val]))(取不同数看剩)(排序取中)...
  • linux---文件颜色含义
  • echarts学习笔记 各图配置(折线图、圆环图、柱形图、折线面积图)
  • 如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)...
  • 【5+】跨webview多页面 触发事件(二)
  • 【刷算法】从上往下打印二叉树
  • Android优雅地处理按钮重复点击
  • CSS实用技巧干货
  • ECMAScript入门(七)--Module语法
  • export和import的用法总结
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • MySQL QA
  • Quartz初级教程
  • Rancher如何对接Ceph-RBD块存储
  • React-生命周期杂记
  • Swoft 源码剖析 - 代码自动更新机制
  • Terraform入门 - 3. 变更基础设施
  • 程序员该如何有效的找工作?
  • 从零开始学习部署
  • 技术胖1-4季视频复习— (看视频笔记)
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 批量截取pdf文件
  • 前端性能优化--懒加载和预加载
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微服务入门【系列视频课程】
  • 详解移动APP与web APP的区别
  • 追踪解析 FutureTask 源码
  • Semaphore
  • 阿里云服务器购买完整流程
  • 整理一些计算机基础知识!
  • #stm32整理(一)flash读写
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (12)Linux 常见的三种进程状态
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十一)手动添加用户和文件的特殊权限
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)负载均衡,回话保持,cookie
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)我也是一只IT小小鸟
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET CORE 第一节 创建基本的 asp.net core