Shell命令学习-尚硅谷

欢迎关注我的微信公众号【万能的小江江】

视频教程来自https://www.bilibili.com/video/BV1hW41167NW

shell是一个命令行解释器,介于Linux内核和外层应用程序之间

shell脚本入门

脚本格式

  • 脚本以#!/bin/bash开头(指定解释器,用sh也行)
  • sh的底层也是调用的bash(可以通过ll看)
  • 可以通过bash hello.shsh hello.sh执行(bash解析器帮你执行),用./hello.sh可能会提示权限不够,要用chmod修改(相当于脚本自己执行)
#!/bin/bash

多命令处理

在目录下创建一个txt文件,在txt文件中增加一句话

#!/bin/bash

cd 路径 #可以绝对可以相对

touch xxx.txt
echo "要加入的文字" >> xxx.txt

shell中的变量

  • 环境变量尽量大写
  • bash中,变量默认类型都是字符串类型,无法直接进行数值运算
  • 变量中如果有空格,需要用双引号或者单引号括起来

系统变量

常用系统变量

$HOME(主目录)、$PWD(当前目录)、$SHELL(SHELL解释器目录)、$USER(当前用户)

自定义变量

A=1 #中间不能有空格,定义变量
#这时候echo一下
echo $A #此时的A就会返回1
unset A #撤销,撤销后echo就不会有值了

声明静态变量

readonly 变量名,静态变量不能unset

readonly B=3
echo $B

全局变量

export 变量名,可供其他shell程序使用

之后就可以声明为全局变量了

特殊变量:$n

基本语法

$n

n是数字,$0代表脚本的名称,$1-$9代表脚本第1-9个参数,10以上的参数,需要用大括号包括,如${10}

#!/bin/bash 

echo "$0 $1 $2 $3"

#测试
root@Beijing:~/scripts# bash $n.sh 1 2 3 4 5 6 
.sh 1 2 3

特殊变量:$

基本语法

$#

显示参数的数量,可以与上面的一起用

特殊变量:$*、$@

基本语法

$*

这个变量代表命令行中所有的参数,$*把所有的参数看作一个整体

$@

这个变量也代表命令行中所有的参数,不过¥@把每个参数区分对待

特殊变量:$?

基本语法

$?

最后一次执行命令的返回状态,如果变量为0,则证明上个命令正确执行。如果为非0,则证明上一个命令执行不正确

运算符

基本语法

  1. $((运算符))$[运算式]
  2. expr + - * / % 加 减 乘 除 求余 运算符间必须有空格
采用expr一步完成计算
#错误用法
expr 3+2
返回3+2
#正确用法
expr 3 + 2
返回5
expr 'expr 2 + 3' \* 4
采用$[运算符]方式
s = $[(2+3)*4]
echo $s
返回20

条件判断

基本语法

[ condition ](condition前后要有空格)

空为false,非空为true,[atguigu]返回true,[]返回false

常用判断条件

两个整数间比较

-lt 小于(less than)

-le 小于等于(less equal)

-eq 等于(equal)

-gt 大于(greater than)

-ge 大于等于(greater equal)

-ne 不等于(not equal)

按照文件权限

-r 读(read)

-w 写(write)

-x 执行(execute)

按照文件类型

-f 文件存在,并且是一个常规文件(file)

-e 文件存在(existence)

-d 文件存在并且是一个目录(directory)

例子

  1. 23是否大于等于22

    [ 23 -ge 22 ] #两边要有空格
    
    echo $? #看返回值是啥
  2. hello.sh是否有写权限

    [ -w hello.sh ]
    
    echo $?
  3. 某目录中的文件是否存在

    [ -e 目录/文件名]
  4. 多条件判断

    &&表示前一条命令执行成功时,才执行后面一条命令

    ||表示上一条命令执行失败后,才执行下一条命令

    [ condition ] && echo OK || echo notOK
    [ condition ] && [] || echo notOK

流程控制

if判断

基本语法

if [ 条件判断式 ];then
    程序
fi
#或者
if [ 条件判断式 ]
    then
        程序
fi
注意
  1. [ 条件判断式 ],中括号和条件判断式直接必须有空格
  2. if后面要有空格

例子

输入一个数字,如果是1,输出1;如果是2,输出2。如果是其他,什么也不输出

#!/bin/bash

if [ $1 -eq 1 ]
then
    echo "1"
elif [$1 -eq 2 ]
then
    echo "2"

fi

case语句

基本语法

case $变量名 in
"值1")
 如果变量值等于值1.则执行程序1
 ;; #相当于break
 "值2")
 如果变量值等于2,则执行程序2
 ;;
 .。。
 *)
 如果变量的值都不是以上的值,则执行此程序
 ;;
 esac结束
注意
  1. case行尾必须为单词in,每一个模式匹配必须以)结束
  2. 双分号;;表示命令序列结束,相当于java中的break
  3. *)表示默认模式,相当于java中的default

例子

输入一个数字,如果是1,输出1;如果是2,输出2;如果是其他,输出other

#!/bin/bash
case $1 in
1)
echo 1
;;
2)
echo 2
;;
*)
echo other
;;
esac

   转载规则


《Shell命令学习-尚硅谷》 InImpasse 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录