首页 > 系统相关 >Shell(Linux)手册

Shell(Linux)手册

时间:2023-05-22 20:45:23浏览次数:47  
标签:command1 文件 Shell echo command2 ssh file Linux 手册

资料来源

Shell全面掌握教程 | 骏马金龙

基础

Bash 中基本数据类型只有字符串类型
echo 123

Bash 中字符串的串联操作,直接将两段数据连接在一起即可,不需要任何操作符。
echo "123""456" echo 123 456

变量

a=1
echo $a

a="www.cnblogs.com/mugetsukun"
echo $a
echo ${#a} #获取变量a保存的字符长度

a='123456'
echo $a

echo $asd #未定义变量

a=
echo $a #空变量

a="123"
echo $a 456 #变量替换,等同于echo 123 456

echo `id root`
echo $(id root)

$ id root
uid=0(root) gid=0(root) groups=0(root)

echo uid=0(root) gid=0(root) groups=0(root) # 命令替换,先执行 cmd,将 cmd 的输出结果替换到 $() 或反引号位置处

>(command)
<(command)
#进程替换,表示将 `command` 命令的输出作为一个临时文件来处理,这个临时文件可以像普通文件一样进行读写操作,但是它并没有被保存到磁盘上,而是被处理器暂存器或内存中。
$ echo <(echo cmd)
/dev/fd/63

a=123
echo $[a+3] # echo $[$a+3]
echo $((a+3)) # echo $(($a+3))

特殊变量

$n:脚本的位置参数
$0:shell或shell脚本的名称
$*:当前脚本的所有参数(不包括程序本身);
$@:扩展为位置参数,"$@"会将每个位置参数单独引起来,"$@"等价于"$1" "$2" "$3"...
$#:位置参数的个数
$$:当前Shell的进程PID,在某些子Shell(如小括号()开启的子Shell)下,会被继承。如果可以,建议使用$BASHPID替代$$
$?:最近一个前台命令的退出状态码
$!:最近一个后台命令的进程PID
$-:当前Shell环境的一些特殊设置,比如是否交互式
$_:最近一个前台命令的最后一个参数(还有其它情况,该变量用的不多,所以不追究了)

命令组合

command1 ; command2 # 先执行command1,后执行command2
command1 && command2 # 如果command1能执行,就执行command2
command1 || command2 # 如果command1不能执行,就执行command2
(command1;command2)
{command1;command2;command3; }
{
	command1
	command2
	command3
}

基本重定向

# 文件描述符 file descriptor,fd
fd=0,/dev/stdin -> /proc/self/fd/0 # 0:标准输入
fd=1,/dev/stdout -> /proc/self/fd/1 # 1:标准输出
fd=2,/dev/stderr ->/proc/self/fd/2 # 2:标准错误
>:覆盖输出
>>:追加输出
<:输入
<<:文档输入
<<<:字符串输入
&>:将标准错误和标准输出覆盖到文件
&>>:将标准错误和标准输出追加到文件

cat file # 默认从终端中读取数据
cat < file # 改为从file读取数据

EOF:end of file
EOL:end of line
EOB:end ofi block

tee

tee 命令用于从标准输入读取数据,并将其复制到标准输出和一个或多个文件中。

$ cat data.txt | tee -a file.txt

这个命令将 data.txt 文件中的内容读取到标准输入中,然后 tee 命令将其复制到标准输出和 file.txt 文件中,并将数据追加到 file.txt 文件的末尾。

test []

Shell test 命令 | runoob

sh_file=test.sh
[ -x "$sh_file" ] && ./$sh_file || { echo "不可执行,退出";exit 1; }
test -x "$sh_file" && ./$sh_file || { echo "不可执行,退出";exit 1; }

测试符

文件类

  • -e 文件是否存在 (exist)
  • -f 文件是否存在且为普通文件 (file)
  • -d 文件是否存在且为目录 (directory)
  • -b 文件是否存在且为块设备 block device
  • -c 文件是否存在且为字符设备 character device
  • -S 文件是否存在且为套接字文件 Socket
  • -p 文件是否存在且为命名管道文件 FIFO (pipe)
  • -L 文件是否存在且是一个链接文件 (Link)

文件属性类

  • -r 文件是否存在且当前用户可读
  • -w 文件是否存在且当前用户可写
  • -x 文件是否存在且当前用户可执行
  • -s 文件是否存在且大小大于 0 字节,即检测文件是否非空文件
  • -N 文件是否存在,且自上次 read 后是否被 modify

文件比较

  • -nt (newer than) 判断 file1 是否比 file2 新
  • -ot (older than) 判断 file1 是否比 file2 旧
  • -ef (equal file) 判断 file1 与 file2 是否为同一文件

数值大小

  • -eq 两数值相等 (equal)
  • -ne 两数值不等 (not equal)
  • -gt n1 大于 n2 (greater than)
  • -lt n1 小于 n2 (less than)
  • -ge n1 大于等于 n2 (greater than or equal)
  • -le n1 小于等于 n2 (less than or equal)

字符串比较

  • -z str (zero) 判定字符串是否为空?str 为空串,则 true
  • str
  • -n str 判定字符串是否非空?str 为串,则 false。注:-n 可省略
  • str1 = str2
  • str1 == str2 str1 和 str2 是否相同,相同则返回 true。”==” 和”=” 等价
  • str1 != str2 str1 是否不等于 str2,若不等,则返回 true
  • str1 > str2 str1 字母顺序是否大于 str2,若大于则返回 true
  • str1 < str2 str1 字母顺序是否小于 str2,若小于则返回 true

逻辑运算

  • -a 或 && (and)
    两表达式同时为 true 时才为 true。
    “-a” 只能在 test 或 [] 中使用,&& 只能在 [[]] 中使用

  • -o 或 || (or)
    两表达式任何一个 true 则为 true。
    “-o” 只能在 test 或 [] 中使用,|| 只能在 [[]] 中使用

  • !
    对表达式取反

  • ( )
    改变表达式的优先级,为了防止被 shell 解析,应加上反斜线转义 ( )

if语句

if condition1;then
    command1;
[elif condition2;then
	command2;]
[else commandN;]
fi

if condition1
then
    command1
elif condition2
then
    command2
else
    commandN
fi
if [ ! -d ~/.ssh ];then
  mkdir ~/.ssh
  chown -R $USER.$USER ~/.ssh
  chmod 700 ~/.ssh
fi
  • if:条件语句,如果条件为真则执行 then 后面的命令。
  • [ ! -d ~/.ssh ]:检查当前用户的 home 目录下是否存在 .ssh 目录。其中,[ ... ] 表示条件测试,! 表示逻辑非运算符,-d 表示检查目录是否存在,~/.ssh 表示要检查的目录路径。
  • then:如果条件测试为真,则执行下面的命令。
  • mkdir ~/.ssh:创建 .ssh 目录。其中,mkdir 是创建目录的命令,~/.ssh 表示要创建的目录路径。
  • chown -R $USER.$USER ~/.ssh:设置目录 .ssh 的拥有者和所属组为当前用户。其中,chown 命令用于设置文件或目录的拥有者和所属组,-R 表示递归设置,$USER.$USER 表示当前用户的用户名和所属组名,~/.ssh 表示要设置的目录路径。
  • chmod 700 ~/.ssh:设置目录 .ssh 的权限为 700(rwx------),即只有当前用户具有读写执行权限,其他用户没有任何权限。其中,chmod 命令用于设置文件或目录的权限,700 表示要设置的权限值,~/.ssh 表示要设置的目录路径。
  • fi:条件语句结束标记,表示条件语句块的结束。
if grep 'test1' /etc/passwd &>/dev/null;then
  echo '用户"test1"存在'
elif grep 'test2' /etc/passwd &>/dev/null;then
  echo '用户"test2"存在'
else
  echo '没有该用户,退出进程'
  exit 1
fi
  • if:条件语句,如果条件为真则执行 then 后面的命令。
  • grep 'test1' /etc/passwd &>/dev/null:在文件 /etc/passwd 中查找字符串 test1。其中,grep 命令用于在文件中查找指定字符串,/etc/passwd 表示要查找的文件路径,&>/dev/null 表示将命令的标准输出和标准错误输出都重定向到 /dev/null,即不显示任何输出信息。
  • then:如果条件测试为真,则执行下面的命令。
  • echo '用户"test1"存在':输出提示信息,表示用户 test1 已经存在。
  • elif grep 'test2' /etc/passwd &>/dev/null:如果第一个条件测试为假,则执行第二个条件测试。在文件 /etc/passwd 中查找字符串 test2。其中,elif 表示如果第一个条件测试为假,则执行这个条件测试。
  • echo '用户"test2"存在':输出提示信息,表示用户 test2 已经存在。
  • else:如果两个条件测试都为假,则执行下面的命令。
  • echo '没有该用户,退出进程':输出错误信息,表示应该创建用户。
  • exit 1:退出脚本,并将退出状态码设为 1。其中,exit 命令用于退出脚本,1 表示退出状态码。状态码为 0 表示命令执行成功,非 0 表示命令执行失败。

case

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

for循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

for var in item1 item2 ... itemN; do command1; command2… done;

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

while循环

while condition
do
    command
done

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

函数

function func_name() {CMD_LIST}

标签:command1,文件,Shell,echo,command2,ssh,file,Linux,手册
From: https://www.cnblogs.com/mugetsukun/p/17419109.html

相关文章

  • 你常用的linux命令有哪些?
    我:您好,我熟悉的Linux命令包括但不限于以下几个方面:文件和目录相关命令:ls、cd、mkdir、rm、cp、mv、chown、chmod等等,这些命令用于文件和目录的管理和操作。进程相关命令:ps、top、kill、nice、nohup等等,这些命令用于查看和管理系统中运行的进程。网络相关命令:ping、netstat、ifc......
  • LInux调度器
    本文结构前面4节先展开讲讲linux内核2.6.24版本的调度器实现,其中包括CFS调度器。然后对linux历史上出现过的O(1)和O(n)调度器做一个比较,看看它们的优缺点。优先级和调度策略linux中进程优先级在用户试图和内核视图两个方面有着不同表达。在用户层面,对普通进程优先级的描述通......
  • Linux安装包管理
    VMwareWorkstation网络模式使用桥接网络:相当于在物理机与虚拟机网卡之间架设了一座桥梁,从而可以通过网络主机的网卡访问外网。使用网络地址转换(NAT):让VM虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟的主机可以通过物理主机访问外网;在物理机中对应的物理网卡是VMnet8......
  • linux常用命令大全
    pwd显示工作路径shutdown-hnow关闭系统  /halt关闭系统shutdown-rnow重启/reboot重启systemctl stopfirewalld关闭防火墙ipaddr查看ip地址1、cd命令:这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可......
  • Linux命令
    Linux命令passsword命令交互式root用户输入用户密码passwd(用户名)非交互式echo'用户名:用户密码'|chpasswdps命令ps-a//显示用户进程ps-au//显示用户ps-aux//显示终端过滤进程ps-aux|grepsshd排序降序ps-sux--sort-pcpups-sux--sort......
  • Linux 使用grep过滤字符串中的指定内容
    命令示例:echoport1234123|grep-oP'port\s+\K\d+'返回:1234这条命令使用grep工具来在文本中查找"Port"后面跟着一个或多个空格的数字,并使用-oP标志来仅显示匹配的数字而不是整个行。其中\K是一个正则表达式的零宽度断言,表示从此处开始匹配,但不包括前面的字符......
  • Checkra1n Linux系统U盘制作及启动方法
    说起苹果手机越狱工具,那么不得不提起checkra1n,这是一款使用硬件漏洞打造而成的越狱工具,可轻松实现iPhoneX以下设备实现永久越狱(包括X),受到了不少用户的喜爱与好评,但一直以来,该工具只能在Mac或者“黑苹果”系统上进行使用,那么Mac的Windows用户想越狱怎么办呢?不要担心,此次小编......
  • 2..NetCore部署Linux环境搭建
    1.查考链接 https://www.cnblogs.com/wugh8726254/p/15231372.html2.https://zhuanlan.zhihu.com/p/3447148063.https://blog.csdn.net/qq_39173779/article/details/1295077924.https://blog.csdn.net/SIXGODrr/article/details/1253723385.https://zhuanlan.zhihu.com/p/59......
  • TDengine升级手册
    TDengine升级手册一、说明1、手册说明:1、本手册从TDengine从3.0.1.6版本升级到3.0.4.1版本2、TDengine采用rpm和deb软件包进行部署3、此次升级的TDengine中只有root用户,若涉及到自建其他用户建议测试后再操作(升级后版本是否需要再次新建用户)2、TDengine说明下载好tdengine......
  • Linux 安装已下载的 dotnet-sdk-6.0
    1.下载地址 https://dotnet.microsoft.com/zh-cn/download/dotnet 2.用工具 FileZilla(类似FTP功能)上传到Linux系统(用root登录) 3.用工具 Xshell7(类似Cmd功能) (用root登录)3.1切换到上传的目录下:  cd /root/下载3.2创建安装目录:     ......