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)

大家都在看

  • Tensorflow

    1.什么是Tensorflow? Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。 它支持CNN…

    Linux 2023年6月6日
    095
  • 【原创】Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    081
  • UE4在Windows下交叉编译打包Linux版本

    UE4在Windows下交叉编译打包Linux版本 我使用的是UE4.27.2,Windows 11,项目是一个 纯蓝图项目,所以打包过程没有什么阻碍。 首先上官网下载对应版本的工…

    Linux 2023年6月6日
    0113
  • 冯·诺依曼体系结构

    cpu运算速度>寄存器速度>L1~L3Cache>内存>外设(磁盘)>光盘 外设(输入设备、输出设备)不和cpu直接数据交换 cpu直接和内存数据交换…

    Linux 2023年6月13日
    0102
  • Centos7下载及安装

    Centos7下载及安装 1.下载虚拟机 虚拟机下载地址: https://www.vmware.com 或者 360一键安装(推荐) 2.在虚拟机上安装Centos7 2.1.通…

    Linux 2023年5月27日
    090
  • Typora详细教程以及下载

    发现一篇非常不错的 Typora 教程,分享给大家。 原文链接:https://www.cnblogs.com/hyacinthLJP/p/16123932.html 作者:MEl…

    Linux 2023年6月7日
    0154
  • 【MQTT】iniparser库的安装和使用

    iniparser库 * – iniparser库介绍 – 下载库 – iniparser中的API – dictionary中的一…

    Linux 2023年6月13日
    0105
  • Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此。为了评估VR系统、VR SDK及Unity应用的性能,通常会实时获取…

    Linux 2023年6月7日
    0101
  • 小白上手Linux系统安装jdk教程

    Eg:将上传后的jdk,解压到/home/lzh/jdk目录下,命令如下: tar -zxvf ./ jdk 版本号 -C /home/lzh/jdk/ 注意末尾必须加&#8221…

    Linux 2023年5月27日
    096
  • CentOS 7 新系统 手动配置网络 简要步骤

    一、配置网卡文件 1.修改网卡文件进入网卡配置文件目录 2.查看网卡文件 CentOS中网卡文件一般为 ifcfg-ens* 这样的文件,多块网卡会有多个类似文件 3.编辑网卡文件…

    Linux 2023年6月8日
    088
  • stat命令的实现

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云链接 测试代码,…

    Linux 2023年5月27日
    0100
  • std::map自定义类型key

    故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map 技术调研:众所周知,map是STL库中常用的关联式容器,底层…

    Linux 2023年6月13日
    0135
  • Linux Ubuntu 下载&安装 MySQL

    1. 下载安装 下载&安装:一句搞定 sudo apt update sudo apt install mysql-server 查看版本信息 mysql –versio…

    Linux 2023年6月14日
    0107
  • 剑指offer计划28(搜索与回溯算法困难)—java

    1.1、题目1 剑指 Offer 37. 序列化二叉树 1.2、解法 这题给我笑死了,我看到题解有个解法,我愿称之为神。 public class Codec { private …

    Linux 2023年6月11日
    0106
  • Nginx 平滑升级(不需要关闭Nginx升级)

    Nginx 平滑升级 对Nginx的版本进行更新,或者要增添新的模块,最简单的方法就是停止当前的Nginx服务,重新编译安装nginx,然后开启新的Nginx服务。但是这样会导致在…

    Linux 2023年6月13日
    090
  • 如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度

    1、前言 使用英飞凌单片机编译器 TASKING TriCore Eclipse IDE 开发编译时,想必感受最深刻的就是编译速度,那是非常慢了,如果是部分修改的源文件编译还好,不…

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