#!/bin/bash
attr=()
num=
while true
do
read -p ">>input:" name
attr[$num]=$name
echo ${attr[$num]}
let num++
if [ $num -eq ]; then
echo ${attr[*]}
exit
fi
done

循环输入后打印输入的值  效果图:                 

eg:

循环输出:

*和@符号的区别:

&& 和 || 的区别: -a 和 -o

-a : 逻辑与 两个都为真

-o : 逻辑或 一个为真即为真   其中很多例子  此结果为false

shell语句实例: 通过随机数猜数字大小游戏:

 #!/bin/bash

 prive=$(expr $RANDOM % )
echo $prive
count=
while true
do
read -p "请输入一个1-1000的随机数:" num
if [ $num -gt $prive ]; then
echo "大了"
elif [ $num -lt $prive ]; then
echo "小了"
else
echo "两个数相等"
echo $count
exit
fi
let count++
done

shell语句注意事项:

1. 变量名和等号之间不能有空格

2. 不能使用标点符号

3. 不能使用bash里的关键字

 只读变量: name="security"

 关键字:     readonly  name

删除变量:unset  name

变量类型:1. 局部变量:在脚本或命令行中定义,尽在当前shell实例中有效,其他shell启动的程序不能访问其局部变量

       2. 环境变量: 所有程序都可以启动程序,都可以访问环境变量         

        查看所有环境变量:env

        删除环境变量:unset NAME

        用vim在/etc/profile文件中添加我们想要的环境变量

        设置新的环境变量 
        export 新环境变量名=内容 
        例:export MYNAME=”LLZZ”    生效: source /etc/profile

shell 字符串:

  单引号和双引号的区别  

    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

获取字符串的长度:str="abcd"

          echo ${#str}

提取字符串:str=”abcd”

  表示从字符串第二个字符开始截取 ,取 4个字符

  echo ${str:1:4}

shell 数组

  定义数组

  arr=(aa bb cc)

读取数组

  echo ${arr[0]}

获取数组的长度

  echo ${arr[@]}

  echo ${arr[*]}

shell 多行注释:

  :<<EOF

   xxxx

   xxxxx

  EOF

shell 基本运算符  +-*/% = == !=  加减乘除 取余 赋值 比较(相等) 不相等

 [root@localhost ~]# expr  + 

 [root@localhost ~]# echo $((+))

 [root@localhost ~]# n=
[root@localhost ~]# let n++
[root@localhost ~]# echo $n []和[[]]区别
[[]]更强大,支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达式)
[root@localhost ~]# sh t.sh
包含
[root@localhost ~]# cat t.sh
#!/bin/bash
a="xxoo"
if [[ $a =~ "x" ]]; then
echo "包含"
else
echo "不包含"
fi

关系运算符

  关系运算符只支持数字,不支持字符串,除非字符串的值是数字

  -eq  是否相等

  -ne  是否不相等

  -gt  表示大于

  -lt  表示小于

  -ge  大于等于

  -le 小于等于

linux shell中"2>&1"含义

*/ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null >&
*/ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null >&

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

为何2>&1要写在后面?

index.php task testOne >/dev/null >&

我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。

可以理解为,如果写在中间,那会把隔断标准输出指定输出的文件

你可以用

ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。

批量在配置文件中修改删除

:g/^#/d     #全局  以#开头  删除   全局删除注释

: g/^$/d    #全局  开头即结尾  删除所有空行

基本shell脚本的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  10. shell 脚本之循环使用 for while 详解

    任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...

随机推荐

  1. numpy.array 合并和分割

    # 导包 import numpy as np numpy.array 的合并 .concatenate() 一维数组 x = np.array([1, 2, 3]) # array([1, 2, 3 ...

  2. zookeeper能干啥

    在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...

  3. 零基础小白入门IT开发指南

    先自我介绍以下,本人是一枚刚毕业不到两年的某一线城市的程序员,本科阶段专业是计算机科学与技术.从大四开始出去实习到现在的编码经验也有快2年半了,两年半的时间包括实习在内任职过有4家公司,包括一家互联网 ...

  4. P3067 [USACO12OPEN]平衡的奶牛群(折半暴搜)

    暴搜无疑.... 首先考虑纯暴搜...... 考虑每一个数: 选在左边集合 选在右边集合 不选 一共三种情况,用一个数组记录搜到的答案,所以暴搜是3^N的复杂度...直接死亡 于是讲折半暴搜.... ...

  5. python购物车练习题

    # 购物车练习# 1.启动程序后,让用户输入工资,打印商品列表# 2.允许用户根据商品编号购买商品# 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒# 4.可随时退出,退出时,打印已购买 ...

  6. 如何在SqlServer中使用层级节点类型hierarchyid

    Sql Server2008开始新增的 hierarchyid 数据类型使存储和查询层次结构数据变得更为简单. 为了使用这个类型,笔者在此进行简单记录,同时为需要的朋友提供一个简单的参考. --获取层 ...

  7. Kubernetes5-集群上搭建基于redis和docker的留言薄

    一.简介 1.环境依旧是kubernetes之前文章的架构 2.需要docker的镜像 1)php-forntend web 前端镜像 docker.io-kubeguide-guestbook-ph ...

  8. 来了!GitHub for mobile 发布!iOS beta 版已来,Android 版即将发布

    北京时间 2019 年 11 月 14 日,在 GitHub Universe 2019大会上,GitHub 正式发布了 GitHub for mobile,支持 iOS 与 Android 两大移动 ...

  9. 每天3分钟操作系统修炼秘籍(13):两个缓冲空间Kernel Buffer和IO Buffer

    两个缓冲空间:kernel buffer和io buffer 先看一张图,稍后将围绕这张图展开描述.图中的fd table.open file table以及两个inode table都可以不用理解, ...

  10. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...