shell各个命令

1.符号参数
$#  传递到脚本的参数个数
$*  以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@  与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$?  显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$!  后台运行的最后一个进程的ID号
$$  脚本运行的当前进程ID号
$0  执行的文件名
$1  传入的第一个参数&   shell命令以&结尾,就可以后台运行,如:roscore&
 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位.也可以shift后加数字参数,如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。示例如下:
#### 2.测试 shift 命令(x_shift.sh)
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done
执行以上程序x_shift.sh:
$./x_shift.sh 1 2 3 4

结果显示如下:

第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1------------------------------------------------------------------
[ -e $var ] 文件是否存在
[ -d $var ] 是否是目录
[ -f $var ] 是否是文件[[ $var1 = $var2 ]] 两个字符串是否相同
[ $var -eq 0 ]   一个变量是否为0
[ $a -gt $b ]   a 大于 b
[ $a -lt $b ]   a 小于 b
-----------------------------------------------------------------

3.set

set -e 执行的时候如果出现了返回值为非零,整个脚本 就会立即退出。 你写的每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出.
set +e 执行的时候如果出现了返回值为非零将会继续执行下面的脚本
#!/bin/sh -e#!/bin/bash -e 放在脚本第一行,和set -e功能也一样
set -x 用于脚本调试,在liunx脚本中可用set -x就可有详细的日志输出.免的老是要echo了

4.read用法:

read既可以从键盘读取,也可以读取文件的一行.
read a      # 这个命令执行后,会要求从键盘输入内容
1234        # 这是键盘输入1234
echo $a     # 会输出 1234下面是read读取文本文件的一行内容:
while 循环读取文本文件$release_conf的内容:
其中文本文件中全部存放的是变量赋值,如某一行:work_path=/home/zhu/
while read line;do  eval "$line"
done < $release_conf
然后,文件中的每一行变量就可以被后续的代码使用了,因为执行了一句 eval "$line" ,他就把 work_path=/home/zhu/ 给执行了
--------------------------------------------------------------------------------------------------------------

5.pgrep, pkill

pgrep -f abc 匹配出含abc的进程 并输出进程的pid
pkill -f abc 结束含abc的所有进程DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"   详解参考https://blog.csdn.net/davidhopper/article/details/78989369
pkill -SIGINT -f record   结束进程名包含record的进程,SIGINT与字符ctrl+c关联,只能结束前台进程
--------------------------------------------------------------------------------------------------------------

6.dirname, basename

dirname命令去除文件名中的非目录部分,删除最后一个“\”后面的路径
basename命令用于打印目录或者文件的基本名称,显示最后的目录名或文件名
dirname /etc/httpd/  # 结果为/etc
dirname /etc/httpd/conf/httpd.conf  #结果为 /etc/httpd/conf/
basename /etc/httpd/conf/httpd.conf  # 结果为 httpd.conf
--------------------------------------------------------------------------------------------------------------

7.nohup

nohup rosbag record -O $bag_name --split --duration=30m -b 2048 $topic >/dev/null 2>&1 &
nohup 是 no hang up 的缩写,就是不挂断的意思。nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup COMMAND &   # 这样就能使命令永久的在后台执行
可参考 https://www.cnblogs.com/jinxiao-pu/p/9131057.html

8.date

date +"%Y%m%d_%H_%M_%S"   # 时间格式:20200519_20_38_47
echo `date +"%Y%m%d_%H_%M_%S"` # 输出时间,必须加上``符号date +"%T"      # %T  时间(只含时分秒,小时以24小时制来表示)。
echo `date +"%T"`%Y%m%d的参数可参考https://zhidao.baidu.com/question/484985079.htmla=date
$a  对
echo $a         # date
a  错b=`date`
$b 错
echo $b  对
b 对

9.查看文件(夹)权限

ls -ld /dev/shm/     查看/dev/shm/目录(本身)的权限
ll /dev/shm/        查看/dev/shm/目录下的文件(夹)的权限, 包括隐藏文件(夹)
ls -l /dev/shm/     查看/dev/shm/目录下的文件(夹)的权限,不包括隐藏文件(夹)
``#### 10.test
​```shell
# 如果 ls -ld /dev/shm/ |  grep drwxrwxrwx的输出为空,就执行 chmod -R 777 /dev/shm/
if test -z "$(ls -ld /dev/shm/ |  grep drwxrwxrwx)" ;thenchmod -R 777 /dev/shm/
fi

11.开机自启动数字小键盘numlock

# 如果该文件是可执行文件
if test -x /usr/bin/numlockx ; thennumlockx on
fi

12chown 将指定文件的拥有者改为指定的用户或组

用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。
chown 需要超级用户 root 的权限才能执行此命令。
只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用 chgrp 命令。
chown mdc.mdc file(dir) # 把file(或者目录)的拥有者和组都改为mdc用户
更多详细用法参考 https://www.runoob.com/linux/linux-comm-chown.html

13.判断文件夹是否存在,判断是不是一个文件

##### 如果 /home/zhz/nas/abc目录不存在,则执行 mount
##### 注意文件或者目录需要用双引号
if [ ! -d "/home/zhz/nas/abc" ];then      # 注意 [ 的右边有空格, ]的左边有空格.mount -t nfs 192.168.1.163:/volume1_106/data /mnt/nas
elseecho "dir exists!"
fi

不使用[]的话也可以使用test命令

if test ! -d "/home/zhz/nas/abc" ;then     mount -t nfs 192.168.1.163:/volume1_106/data /mnt/nas
elseecho "dir exists!"
fi

如果 /home/zhz/nas/def.txt是一个文件,则执行

软链接不是文件,不能用-f来判断
if [ -f "/home/zhz/nas/def.txt" ];thenrm -f def.txt
fi# 如果 /home/zhz/abc是一个链接文件,则执行
if [ -L "/home/zhz/abc" ];thenrm -f def.txt
fi

14.把一段命令当做变量输出

# 把命令用`()`括起来,然后在括号`()`前面加上`$`符号,最后把他们都用`" "`包起来即可.
"$(ls -ld /dev/shm/ |  grep drwxrwxrwx)"# 命令多重嵌套,先是 path_1 = dirname "${BASH_SOURCE[0],然后在 cd 到 $path_1,再执行 pwd显示当前路径,最后把他们当做变量赋值给 DIR
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

【Linux】1.shell各个命令相关推荐

  1. linux中Shell历史命令记录文件的路径是什么

    Bash shell在"~/.bash_history"("~/"表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易.每个在系 ...

  2. Linux下Shell常用命令与工具

    文章目录 Shell常用命令与工具 1.ls 2.echo 3.printf 4.cat 5.tac 6 .rev 7.wc 8.cp 9.mkdir 10.mv 11.rename 12.dirna ...

  3. Linux下Shell脚本命令行参数:getopt、getopts用法

    目录 简介 getopt 简介 支持选项 用法 getopt optstring parameters getopt [options] [--] getopt [options] -o|--opti ...

  4. 第一章:Linux下shell常用命令

    一.vim的应用和设置 Ctrl+Alt+t(这个是打开终端的指令,打开终端才能进行指令安装对吧!...嗯嗯) 1.在(64位)ubuntu16.4里面安装vim编辑器的指令: sudo apt in ...

  5. Linux中Shell的命令替换用法笔记

    命令替换主要是指将命令的标准输出值赋值给某个变量.命令替换属于Shell编程中非常重要的功能,需要熟悉掌握. 命令替换的方式 1.反引号:`命令` 2.$():$(命令) 用法说明:date1=`da ...

  6. linux中shell curl命令获取http状态码--------强大的网络传输工具

    文章来源:http://dbajun.iteye.com/blog/1813801 curl命令详解:http://blog.sina.com.cn/s/blog_94cf845f0102w8vt.h ...

  7. 【好文转载】linux反弹shell的各种姿势

    本文为转载,原作者与链接如下: 作者:@11阳光 https://www.cnblogs.com/sunny11/p/14290092.html 题记 搞完xss钓鱼一时不知道服务器还能干点什么,然后 ...

  8. linux中的shell有printf吗,Linux Shell系列教程之(八)Shell printf命令详解

    在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell printf命令有了一个简略的介绍,本篇给大家详细介绍下Shell中的printf命令. 一.Shell p ...

  9. linux小工具(1)查看shell的命令行历史记录

    前言: 在linux的shell终端下,针对需要重复执行的命令,为了进行比较高效的作业,我们会直接使用历史命令. 下面介绍几种常用的方法: (1) ↑ 和 ↓ 键操作: ↑:向前查找(更早输入的命令) ...

最新文章

  1. python中变量的作用域有几种_Python中变量的作用域(variable scope)
  2. 150m虚拟主机容量不足
  3. 这些高校竟因名字太“坑爹”被误会为三本?盘点九所实力强劲但被名字耽误的大学...
  4. ajax传值controller怎么写,关于ajax请求Controller传值问题详细记录
  5. [转]C#操作注册表
  6. mysql--创建表,插入数据,修改表名,删除表,简单查询/内连接、左/右连接
  7. C#防SQL注入之SqlParameter参数化
  8. RGB HSV CMYK LAB颜色空间
  9. java导出excel设置行高列宽_Java 设置Excel自适应行高、列宽
  10. Android-MMS中彩信附件的格式及分析
  11. Windows 7 安装软件错误:“Error 1935 ...HRESULT: 0x800736FD” 的解决办法
  12. VMware ESXi 6.7 U3 Unlocker OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (集成驱动版)
  13. 弱口令审计-工具用法大全
  14. 2021中国IC封装基板市场现状及未来发展趋势
  15. RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)
  16. R沟通 | 如何在Typora中设置免费的图床
  17. 深度linux升级15.3,深度操作系统 15.3 发布:颜值高实力强
  18. python求峰面积_大学慕课2020年用Python玩转数据答案大全
  19. R语言实战应用精讲50篇(三十)-R语言实现支持向量机(附R语言代码)
  20. 在ArcGIS Catalog中删除rastercatalog图层后遇到的问题

热门文章

  1. elasticSearch6源码分析(7)node
  2. 美团点评业务之技术解密,日均请求数十亿次的容器平台
  3. 微服务架构 为什么需要配置中心
  4. 唯品会API网关设计与实践--转
  5. Lesson 13.3 梯度不平稳性与Glorot条件
  6. php中的魔术函数以及魔术常量
  7. 迪拜与IBM合作推出基于区块链的商业注册系统
  8. 从微信AI首席顾问到金融文档智能,一位中科院计算机科学家AI产品化实践
  9. 大数据变现四种途径,如何把海量数据变成现金?
  10. c语言开发游戏趋势,都9012年了,为何我还坚持用C语言开发游戏