#!/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. HTML基本单词《结构化标签》

  2. Ubuntu13.10编译android源码中遇到的问题

    1. jdk的版本不对 我开始安装的是最新的jdk7,但是编译时会出现jdk的版本

  3. Unicode字符串和非Unicode字符串

    什么是Unicode? Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每 ...

  4. Centos 7.X 安装及常规设置

    一.制作USBHDD+启动 需要工具: UltraISO(软碟通) U盘 centos7镜像: http://www.centos.org 二.安装(有坑) U盘启动电脑,进入安装界面: 选中第一项, ...

  5. 2019CSP day1t1 格雷码

    题目描述 通常,人们习惯将所有 \(n\) 位二进制串按照字典序排列,例如所有 \(2\) 位二进制串按字典序从小到大排列为:\(00,01,11,10\). 格雷码(\(Gray Code\))是一 ...

  6. [高效工作软件] Capslock+的使用笔记 (快捷键)

    1.下载https://cjkis.me/capslock+/#%E4%B8%8B%E8%BD%BD,双击即可安装,中文路径也可: 2.这个软件的代码开源了的,以后java学成之后,可以去看看源码: ...

  7. 021.掌握Pod-Pod调度策略

    一 Pod生命周期管理 1.1 Pod生命周期 Pod在整个生命周期过程中被系统定义了如下各种状态. 状态值 描述 Pending API Server已经创建该Pod,且Pod内还有一个或多个容器的 ...

  8. 如何解决UNMOUNTABLE BOOT VALUME

    Windows error:UNMOUNTABLE BOOT VALUME 解决方法:Windows 修复工具 chkdsk命令 chkdsk D:/f ps:chkdsk 磁盘名 /f

  9. Netty创建服务器与客户端

    Netty 创建Server服务端 Netty创建全部都是实现自AbstractBootstrap.客户端的是Bootstrap,服务端的则是ServerBootstrap. 创建一个 HelloSe ...

  10. 搭建Nginx七层反向代理

    基于https://www.cnblogs.com/Dfengshuo/p/11911406.html这个基础上,在来补充下七层代理的配置方式.简单理解下四层和七层协议负载的区别吧,四层是网络层,负载 ...