Linux-shell

shell

为注释

!执行脚本的 解释器 为bash

权限问题 remark

调试 bash -x

man test

变量 —>默认必须全局变量 局部变量必须给local

a=0; 弱类型语言 没有明确类型

命令替换符号· pwd

➜  shell_test a=pwd
➜  shell_test echo $a
/root/shell_test
➜  shell_test a=$a:a:
➜  shell_test echo $a
/root/shell_test::

这只是一个字符串拼接

local b=5 局部变量—必须给local

$0:获取当前执⾏shell脚本的⽂件名,包括路径。

$n: 获取当前执⾏脚本的第n个参数,n=1…9,如果n⼤于9,则需要将n使用⼤括号括起

$*:获取当前shell的所有参数,将所有命令⾏参数视为单个字符串,相当于”$1$2$3″;

$#:得到执⾏当前脚本的参数个数;个数 ./1.sh 1 2 3 7

$@:获取这个程序所有参数,并保留参数之间的任何空白,相当于”$1″ “$2” “$3”,这

是将参数传给其他程序的最好办法;

$? 判断是否成功执行 -非0 都是错误的

$$:取当前进程的PID

$!:上一个指令的PI

  • 大于 -gt (greater than)

  • 小于 -lt (less than)

  • 大于或等于 -ge (greater than or equal)

  • 小于或等于 -le (less than or equal)

  • 不相等 -ne (not equal)

  • 相等 -eq (equal)

输入输出 – READ

read [-options] [variable…]

example

->read age
->input  1444
->echo $age
➜  shell_test read name age
name  111
➜  shell_test echo $name $age
name 111

-a array #把输⼊赋值到数组 array 中,从索引号零开始。

-d delimiter

用字符串 delimiter 中的第⼀个字符指示输⼊结束,⽽不是⼀个换⾏符

使用 Readline 来处理输⼊。这使得与命令⾏相同的⽅式编辑输⼊

-n num

读取 num 个输⼊字符,⽽不是整⾏

-p prompt

为输⼊显示提示信息,使用字符串 prompt

example :

➜  shell_test read -p "Please input your and age" name

Raw mode. 不把反斜杠字符解释为转义字符

Silent mode.

➜  shell_test read -p -s "Please input your and age" name  --遮掩  类似登录遮掩米面

-t seconds #超时

-u fd

使用⽂件描述符 fd 中的输⼊,⽽不是标准输⼊

centos 6 的环境下 必须强调 参数 使用读入参数必须要有 $符号 (ubuntu 似乎不需要)

  1 #!/bin/bash
  2 read n
  3 if [ $n -gt 0 ];then
  4     echo ">0"
  5 else
  6     echo "<0" 7 fi < code></0">

IF-ELSE

强调一下 if[[]] 必须加; 在 then 后面必须杰 fi

example

#!/bin/bash
  2 read n
  3 if [[ $n -gt 0 ]];then
  4     echo ">0"
  5 else
  6     echo "<0" 7 fi < code></0">

判断是否为空

  1 #!/bin/bash
  2 read n
  3 if [[ ${n}x == x ]]; then                                                                           4    echo "n is null"
  5 else
  6     echo "n = $n"
  7 fi

标准长度判断

 #!/bin/bash                                                                                                                                                                                                    2 read n
  3 if [[  ! -n ${n} ]]; then
  4    echo "n is null"
  5 else
  6     echo "n = $n"
  7 fi
 #!/bin/bash
  2 read n
  3 if [[ $n -gt 0 ]];then
  4     echo "$n >12"
  5     elif [[ $n -eq 12 ]] ;then                                                                      6     echo "$ n<12" 7 8 9 else echo "xxx" fi< code></12">

用于主要用于菜单

function __test__(){
    echo "1xxxx"
    echo "2xxxx"
    echo "3xxxx"
}

__test__

read a
case $a in
    1 )
         echo "xxx"
    ;;
    2)
         echo "yyy"
    ;;
    3 )
         echo "xxxxx"
    ;;
esac

Example

  1 #! /bin/bash
  2 for each in ls;do
  3     echo ${each}
  4 done

类似于foreach 语句

标准循环

9 for (( i = 1 ; i < 10 ; i++ )); do
10    ls ${i}.*                                                                                                                                                                                                 11 done
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 25 for i  in seq 0 100; do
 26     if [[ $[i % 2] -eq 1 ]] ; then
 27     echo $i
 28     fi
 29 done
  2 number =0
  3 while [[ ${number} -lt 100 ]]; do
  4   echo  ${number}
  5   number =$[${number}+1]                                                                                                                                                                                       6   let number+=1
  7 done

continue

会跳过当前循环中的代码,强迫开始下一次循环。

 for (( i = 1 ; i < 10 ; i++ )); do
 20     ls ${i}.*
 21    if [[ $i -eq 3 ]]; then
 22        continue
 23    fi
 24
 25    if [[$i -eq 6 ]]; then
 26        continue
 27    fi
 28 done                                                                                                                                                                        23 done

数组Arrary

declare 声明方式

declare a test
&#x8F93;&#x51FA;&#x6570;&#x7EC4;&#x5185;&#x5BB9;   //&#x9700;&#x8981;&#x5927;&#x62EC;&#x53F7;&#x8F6C;&#x4E49;
 ${&#x3010;&#x3010;&#x3011;[*]}
 ${arry[@]}
&#x786E;&#x5B9A;&#x6570;&#x7EC4;&#x5143;&#x7D20;&#x4E2A;&#x6570;  &#x603B;&#x6570;
 ${#arry[@]}
&#x627E;&#x5230;&#x6570;&#x7EC4;&#x7684;&#x4E0B;&#x6807;
 ${!arry[@]}
&#x6570;&#x7EC4;&#x957F;&#x5EA6;
echo ${#test}

数据追加

arry+(abc);
sort  &#x6392;&#x5E8F;
#! /bin/bash
    while [[ 1 ]];do
    echo "inpuut the number: ";
    read n
       for (( i=2; i< ${n}; i++));do
            flag=1
          if [[ $[${n}%${i} ] -eq 0 ]];then
              echo " is not prime"
               flag=0
              break
         fi
      done
      if [[ ! ${flag} -eq 0 ]];then
         echo "is prime"
      fi

  done

变量,参数展开

${parameter:-word}  &#x5982;&#x679C;&#x53D8;&#x91CF;&#x672A;&#x5B9A;&#x4E49;&#xFF0C;&#x5219;&#x8868;&#x8FBE;&#x5F0F;&#x7684;&#x503C;&#x4E3A;word&#x3002;   --&#x5982;&#x679C;&#x6307;&#x4EE4;&#x7684;&#x67D0;&#x4E2A;&#x53C2;&#x6570;&#x51FA;&#x73B0;&#x4E86;&#x5F02;&#x5E38;,&#x901A;&#x8FC7;&#x8BE5;&#x6307;&#x4EE4;&#x8865;&#x5145;&#x6307;&#x4EE4;
${parameter:=word}  &#x5982;&#x679C;&#x53D8;&#x91CF;&#x672A;&#x5B9A;&#x4E49;&#xFF0C;&#x5219;&#x8BBE;&#x7F6E;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x4E3A;word&#xFF0C;&#x8FD4;&#x56DE;&#x8868;&#x8FBE;&#x5F0F;&#x7684;&#x503C; &#x4E5F;&#x662F;word&#x3002; &#x4E0E;&#x4E4B;&#x540C;&#x4E0A;
${parameter:?word}  &#x7528;&#x4E8E;&#x6355;&#x6349;&#x7531;&#x4E8E;&#x53D8;&#x91CF;&#x672A;&#x5B9A;&#x4E49;&#x800C;&#x5BFC;&#x81F4;&#x7684;&#x9519;&#x8BEF;&#x5E76;&#x9000;&#x51FA;&#x7A0B;&#x5E8F;,
rm ${c:?"not found"}/*
zsh: c: "not found"
echo $?

1  &#x8FD4;&#x56DE;1

rm ${c:+"not found"}/* &#x5982;&#x679C;&#x53D8;&#x91CF;&#x5DF2;&#x7ECF;&#x5B9A;&#x4E49;&#xFF0C;&#x8FD4;&#x56DE;word&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x771F;&#x3002;  &#x5224;&#x65AD;&#x662F;&#x5426;&#x5B58;&#x5728;

&#x63D0;&#x793A;&#x4E00;&#x4E0B; [!]&#x662F;&#x67E5;history &#x8BB0;&#x5F55;&#x7684;id
${!prefix*}   &#x5982; abc=13 abd =12   echo ${!ab*}  &#x5339;&#x914D;&#x5168;&#x90E8;ab&#x5F00;&#x5934;&#x7684;&#x53D8;&#x91CF;

example &#xFF1A; find ${pate :-/error} -name ".c" -type f | xargs rm -f  &#x62A5;&#x9519;
example &#xFF1A; find ${pate :? error} -name ".c" -type f | xargs rm -f  &#x62A5;&#x9519;
!&#x53F7; &#x6A21;&#x7CCA;&#x5339;&#x914D;   !cl     a=abc  echo ${! ab*}
&#x53D8;&#x91CF;&#x5982;&#x679C;&#x4E3A;&#x7A7A; :/ &#x8865;      &#x51FA;&#x9519;&#x9000;&#x51FA; :?error
&#x4FDD;&#x8BC1;&#x6307;&#x4EE4;&#x51FA;&#x9519;&#x7684;&#x5065;&#x58EE;&#x6027;

${#parameter} &#x8F93;&#x51FA;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x957F;&#x5EA6;  echo ${#a}       a=123
${parameter:offset} &#x4ECE;&#x7B2C;offset&#x5B57;&#x7B26;&#x5F00;&#x59CB;&#x622A;&#x53D6;    a=123  echo ${a:1}
${parameter:offset:length} &#x4ECE;offset&#x5B57;&#x7B26;&#x5F00;&#x59CB;&#x622A;&#x53D6;&#xFF0C;&#x53D6;length&#x957F;&#x5EA6;  &#x279C;    a=123  ~ echo ${a:1:1}  2
${parameter#pattern} &#x4ECE;&#x5934;&#x5220;&#x9664;&#x6700;&#x77ED;&#x5339;&#x914D;  &#x6A21;&#x7CCA;&#x5339;&#x914D;
${parameter##pattern} &#x4ECE;&#x5934;&#x5220;&#x9664;&#x6700;&#x957F;&#x5339;&#x914D; &#x6A21;&#x7CCA;&#x5339;&#x914D;

&#xFC;${parameter//pattern/string} &#x5168;&#x90E8;&#x5339;&#x914D;&#x88AB;&#x66FF;&#x6362;
&#xFC;${parameter/#pattern/string} &#x5B57;&#x7B26;&#x4E32;&#x5F00;&#x5934;&#x7684;&#x66FF;&#x6362;
&#xFC;${parameter/%pattern/string} &#x5B57;&#x7B26;&#x4E32;&#x7ED3;&#x5C3E;&#x7684;&#x66FF;&#x6362;
&#xFC;${parameter,,} ${parameter^^} &#x5168;&#x90E8;&#x8F6C;&#x6362;&#x4E3A;&#x5C0F;&#x5199;&#x3001;&#x5927;&#x5199;
&#xFC;${parameter,} ${parameter^} &#x9996;&#x5B57;&#x6BCD;&#x8F6C;&#x6362;&#x4E3A;&#x5C0F;&#x5199;&#x3001;&#x5927;&#x5199;

权限问题 remark

&#x279C;  shell_test sudo ./1.sh
sudo: ./1.sh: command not found

升级权限

&#x279C;  shell_test chmod +x 1.sh
./1.sh &#x6267;&#x884C;&#x6210;&#x529F;

Original: https://www.cnblogs.com/yijieyufu/p/16423192.html
Author: Aquiet
Title: Linux-shell

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581804/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang 在windows下编译Linux下可执行文件

    Windows 下编译Linux 64位可执行程序 set GOARCH=amd64 set GOOS=linux go build 如果想改回来,就 set GOOS=windo…

    Linux 2023年6月11日
    0107
  • rsync

    rsync是什么 rsync特性 1)可以镜像保存整个目录树和文件系统。 2)可以很容易做到保持原来文件的权限、时间、软硬连接等。 3)无需特殊权限即可安装。 4)快速:第一次同步…

    Linux 2023年6月6日
    085
  • Question03-查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

    * SELECT stu.SID, stu.Sname, CAST(AVG(sc.score) AS DECIMAL(18,2)) avg_score FROM Student s…

    Linux 2023年6月7日
    085
  • Xshell的快捷键【转】

    删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符相当…

    Linux 2023年5月28日
    085
  • 华为IPv6 GRE隧道

    IPv6 over IPv4 GRE封装隧道 实验目标: 该实验参考了华为官网案例配置https://support.huawei.com/enterprise/zh/doc/ED…

    Linux 2023年6月7日
    072
  • Linux 配置 IPv4或 IPv6地址

    Linux 配置 IPv4或 IPv6地址 配置 配置介绍 查看网络 ifconfig 网卡介绍 eth0 :本地网卡(CentOS7 是ens33) lo :内网网卡,管理内网I…

    Linux 2023年6月6日
    085
  • 【Docker搭建】3. 在Docker中搭建Zookeeper集群

    docker pull zookeeper docker run –name zk1 -d zookeeper apt-get update apt-get install vi…

    Linux 2023年6月13日
    091
  • 设计模式——结构性设计模式

    结构性设计模式 针对类与对象的组织结构。(白话:类与对象之间的交互的多种模式 类/对象适配器模式 当需要传入一个A类型参数,但只有B类型类时,就需要一个A类型的适配器装入B类的数据…

    Linux 2023年6月7日
    0120
  • CTF竞赛权威指南(PWN篇)下载地址

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这里给大家提供《CTF竞赛权威指南(PWN篇)》的下载地址(不是网上的64…

    Linux 2023年6月13日
    092
  • 模型层

    准备阶段 django自带的sqlite3数据库,功能很少,并且针对日期类型不精确 准备步骤 数据库正向迁移命令(将类操作映射到表中) python3 manage.py make…

    Linux 2023年6月7日
    088
  • 本地连接虚拟机redis,解决redis connection refused: connect问题

    VM VirtualBox安装虚拟机ubuntu16.04 1、redis.conf配置文件中注释 bind 127.0.0.1,重启redis: 2、防火墙关闭(或添加可访问的端…

    Linux 2023年5月28日
    093
  • OpenResty入门

    OpenResty介绍 OpenResty通过汇聚各种设计精良的 Nginx模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web …

    Linux 2023年6月8日
    084
  • 使用Navicat远程连接Oracle报错ORA-28547问题解决

    用Navicat连接Oracle数据库时出现如下错误: 按照数据库连接信息去连接就好了,注意的是默认的Server Name是ORCL,记得改成你要连接的数据库名; 在进行连接测试…

    Linux 2023年6月13日
    0117
  • Java基础系列–08_集合1

    集合当中有很多都是应用到泛型的技术,所以在讲集合之前,应该先将泛型的概念普及一下。 泛型:(1)泛型是一种类型,但是这种类型是在编译或者调用方法时才确定。(2)格式: (3)好处:…

    Linux 2023年6月7日
    090
  • 【故障公告】取代 memcached 的 redis 出现问题造成网站故障(已解决)

    6月19日开始,我们将博客站点的缓存服务器从 memcached 换成了 redis,稳定运行了3天,今天上午访问高峰突然出现问题,在 11:00-12:30 期间影响了网站的正常…

    Linux 2023年5月28日
    0107
  • 数据库主从复制

    主从复制是MySQL中最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库…

    Linux 2023年6月6日
    060
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球