基本shell脚本
#!/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脚本的更多相关文章
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- shell脚本规划化模板
shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux Shell脚本逻辑操作符简介
在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- shell 脚本之循环使用 for while 详解
任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...
随机推荐
- Intellij IDEA配置JDK、Maven和Tomcat
一.配置JDK 1.File-->Project Structure 2.选择SDKs 3.点击+号添加自己本地jdk的安装目录,保存即可 二.配置Maven 1.File -> Othe ...
- 14 Zabbix4.4.0系统实现监控checkpoint设备
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 14 Zabbix4.4.0系统实现监控checkpoint设备 1. 前期规划信息 2. 配置 ...
- numpy---python数据分析
最后大图可点开保存 文章目录 最后大图可点开保存 学习目标 3.1.1Numpy介绍 3.1.2 ndarray介绍 3.1.3 ndarray与Python原生list运算效率对比 3.1.4 nd ...
- html5 textarea 写入换行的方法
html5 textarea 写入换行的方法<pre> <textarea id="fwe" class="selmiao" cols=&qu ...
- js正则匹配的出链接地址
content为需要匹配的值 var b=/<a([\s]+|[\s]+[^<>]+[\s]+)href=(\"([^<>"\']*)\"| ...
- 使用CXF发布webservice服务及注意要点
一.概念 1.什么是webservice Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用 ...
- 深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍
第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9943779.html 本章汇编代码中常出现的几个指令及其含义 1.push 操作数的个数:1 将操作数(一般 ...
- 【algo&ds】0.数据结构和算法入门
解决问题方法的效率,跟数据的组织方式有关 解决问题方法的效率,跟空间的利用效率有关 解决问题方法的效率,跟算法的巧妙程度有关 什么是数据结构 数据对象在计算机中的组织方式 逻辑结构 物理存储结构 数据 ...
- go中的数据结构接口-interface
1. 接口的基本使用 golang中的interface本身也是一种类型,它代表的是一个方法的集合.任何类型只要实现了接口中声明的所有方法,那么该类就实现了该接口.与其他语言不同,golang并不需要 ...
- C++中对C的扩展学习新增语法——引用
引用 引用的好处: 1.引用的好处 C++使用结构体,不需要再使用 typedef. 2.值传递是将实参进行拷贝,赋值给形参,如果对象比较大,每次拷贝效率比较低,并且函数内部无法修改外部变量的值,能力 ...