bash脚本的特性01
1.bash特性之多命令执行
cmdcmd1 `cmd2` #引用cmd1 | cmd2 | cmd3 | ... #管道
与:true && true = truetrue && false = false第一个操作数为true,其结果将取决于第二个操作数;false && true = falsefalse && false = false第一个操作数为False,其结果至此可断定,为false;或:true || true = truetrue || false = true第一个操作数为true,其结果至此可断定,为true;false || true = truefalse || false = false第一个操作数为false,其结果将取决于第二个操作数;非:! true = false! false = true
#!/bin/bash! id $name && useradd $name && echo "the $name has been add"||echo "the user $name has exist"

2.bash的配置文件
3.bash脚本编程之算术运算
#!/bin.bashn1=$(id -u root)n2=$(id -u daemon)n3=$(id -u shutdown)let sum=$n1+$n2+$n3echo $sum
num1=$(wc -l /etc/fstab|grep -o '^[0-9]*\>')num2=$(wc -l /etc/grub2.cfg|grep -o '^[0-9]*\>')num3=$(wc -l /etc/issue|grep -o '^[0-9]*\>')let num0=$num1+$num2+$num3echo $num0#或者num1=$(cat /etc/fstab | wc -l)
num1=$(grep '^$' /etc/fstab|wc -l)num2=$(grep '^$' /etc/grub2.cfg|wc -l)num3=$(grep '^$' /etc/issue|wc -l)let num0=$num1+$num2+$num3echo $num0
4.bash脚本编程格式
第一行,顶格:#!/bin/bash注释信息:#代码注释:缩进,适度添加空白行;
数据类型:字符型、数值型
5.bash脚本编程之算术运算
let VAR=expressionVAR=$[expression]VAR=$((expression))VAR=$(expr argu1 argu2 argu3)注意:有些时候乘法符号需要转义;
增强型赋值:变量做某种算术运算后回存至此变量中
+=,-=,*=, /=, %=自增:VAR=$[$VAR+1]let VAR+=1let VAR++自减:VAR=$[$VAR-1]let VAR-=1let VAR--
例1:写一个脚本
#!/bin/bashn1=$(head - /etc/passwd | tail - | cut -d ":" -f3)n2=$(head - /etc/passwd | tail - | cut -d ":" -f3)let sum=$n1+$n2echo "The sum is $sum."
5.bash脚本编程之条件测试
1.执行命令,并利用命令状态返回值来判断0:成功1-255:失败2.测试表达式test expression[ expression ][[ expression ]]注意:expression两端必须有空白字符,否则为语法错误
bash的条件测试:
5.1 数值测试
-eq:是否等于,[ $num1 -eq $num2 ]-ne:是否不等于-gt:是否大于-ge:是否大于等于-lt:是否小于-le:是否小于等于
5.2 字符串测试
==:是否等于>:是否大于<:是否小于!=:是否不等于=~:左侧字符串是否能够被右侧的pattern所匹配-z "string":判断指定的字串是否为空;空则为真,不空则假;-n "string":判断指定的字符串是否不空;不空则真,空则为假;注意:(1) 字符串要加引用;(2) 要使用[[ ]];
5.3 文件测试
5.3.1 存在性测试
5.3.2 存在型及类型测试
5.3.3 文件权限测试
5.3.4 其他
5.3.5 双目测试
5.3.4 组合测试条件
command1 && command2command1 || command2!command例:[ -O file ] && [ -r file ]
第二种方式
expression1 -a expression2expression1 -o expression2!expression例:[ -O file -a -x file]
#!/bin/bash- name=$(hostname)
#注意:上面的括号必须有[ -z "$name" -o "$name" == "localhost.localdomain" -o "$name" == "localhost" ] && hostname www.mageedu.com || echo "the hostname is `hostname`"#先判断主机名是否为空或者为localhost.localdomain或localhost,如果为真,就设置为www.mageedu.com,后面的表达式不执行;如果为假,则第二个表达式不执行,执行第三个表达式,显示现在的主机名
6.脚本的状态返回值
7.向脚本传递参数
7.1 位置参数变量
引用方式:$1,$2,...${10},${11},..轮替:shift [n]:位置参数轮替
练习:写一个脚本,通过命令传递两个文本文件路径给脚本,计算其空白行数之和
#!/bin/bash- #linenum.sh
- n1=$(grep "^$" $1 | wc -l)
n2=$(grep "^$" $2 | wc -l)let sum=$n1+$n2echo "Total blank lines is $sum."#测试/bin/bash linenum.sh -x /etc/fstab /etc/virc
7.2 特殊变量
#!/bin/bashnum1=$(cat /etc/passwd|wc -l)num2=$(cat /etc/shadow|wc -l)let sum=$num1+$num2echo $sumpwdecho "the 0 is $0"echo "the 1 is $1"echo "the * is $*"echo "the @ is $@"

8.bash脚本编程之用户交互:
#!/bin/bash#echo -e "please enter your test:"read TESTREADecho $TESTREAD#下面是测试结果:[root@zhangpf test]# /bin/bash -x ceshi.sh+ echo -e 'please enter your test:'please enter your test:+ read TESTREADabc+ echo abcabc
#!/bin/bash#- read -p "please enter a username: " name
[ -z "$name" ] && echo "a username is needed." && exitread -p "please enter a passwd for $name ,[passwd]: " password[ -z "$password" ] && password="password"if id $name &>/dev/null;thenecho "The user $name exists."echo "The user id is `id -u $name`"elseuseradd $nameecho "$password" | passwd -stdin $name &>/dev/nullecho "The user $name finished."fi
bash脚本的特性01的更多相关文章
- 生产力工具:shell 与 Bash 脚本
生产力工具:shell 与 Bash 脚本 作者:吴甜甜 个人博客网站: wutiantian.github.io 注意:本文只是我个人总结的学习笔记,不适合0基础人士观看. 参考内容: 王顶老师 l ...
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 使用shc加密bash脚本程序
摘要以前写看到别人写的脚本用shc加密的,我也有就了解了下. SHC代表shell script compiler,即shell脚本编译器.通过SHC编译过的脚本程序对普通用户而言是不读的,因此如果你 ...
- 玩转Bash脚本:循环结构之while循环(转)
转自:http://blog.csdn.net/guodongxiaren/article/details/43341769 总第8篇 本系列(玩转Bash脚本)更多文章,请访问:http://b ...
- 玩转Bash脚本:选择结构之case
总第5篇 之前,我们谈到了if. 这次我们来谈还有一种选择结构--case. case与if if用于选择的条件,不是非常多的情况,假设选择的条件太多.一系列的if.elif,.也是醉了. 没错,ca ...
- Linux--shell的基本特性--01
1.bash的基本特性: a) 命令展开:date命令—— 基于date命令创建命令 查看系统时钟:date 查看硬件时钟: clock .hwclock (常常同步系统时钟与硬件时钟) cal 查看 ...
- Bash脚本编程之脚本基础和bash配置文件
脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成 ...
- bash脚本测试总结
bash脚本测试总结 跟踪脚本的执行 可以让bash打印出你脚本执行的过程中的所有语句.这很简单,只需要使用bash的-x选项就可以做到,下面让我们来看一下. 下面的这段脚本,先是输出一个问候 ...
随机推荐
- 克隆 CentOS 后系统启动问题解析
问题背景: 虚拟机:VMware Workstation. 操作系统:CentOS,是Linux发行版之一. 问题: 原因:虚拟机的服务没有开启(虚拟机开启一般比较占内存,所有多数人都设置成手动开启) ...
- 利用React/anu编写一个弹出层
本文将一步步介绍如何使用React或anu创建 一个弹出层. React时代,代码都是要经过编译的,我们很多时间都耗在babel与webpack上.因此本文也介绍如何玩webpack与babel. 我 ...
- cpp(第十一章)
1. std::istream & operator>>(std::istream &is,complex_c &t) { std::cout<<&qu ...
- Copy_on_write的简单实现
Copy_on_write即写时复制,它的原理是通过引用计数来实现的. 即在分配空间时多分配额外的空间,用来记录有多少个指针指向该空间.当有新的指针指向该空间,引用计数则加一,当要释放该空间时,引用计 ...
- Ext表格分页
pageSize:配置表格或者数据的数量, autoLoad: { start: 0, limit: 2 }:自动加载时候的参数, proxy中:params: {start: 0,limit: 2} ...
- 设计模式(2)工厂方法模式(Factory Method)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生 ...
- 关于Handler的理解,子线程不能更新UI的纠正和回调的思考
开发Android这么久了,总会听到有人说:主线程不能访问网络,子线程不能更新UI.Android的主线程的确不能长时间阻塞,但是子线程为什么不能更新UI呢?今天把这些东西整理,顺便在子线程更新UI. ...
- Winform Timer用法,Invoke在Timer的事件中更新控件状态
System.Timers.Timer可以定时执行方法,在指定的时间间隔之后执行事件. form窗体上放一个菜单,用于开始或者结束定时器Timer. 一个文本框,显示定时执行方法. public pa ...
- oracle学习笔记(1)-三级模式SCHEMA
oracle三级模式及二级映像 模式(schema)是数据库的一个名词,大部分的数据库在结构上都有三级模式的特征,了解下基本的概念,有助于后续深入的学习. 用老罗坚果pro发布会的话说就是,不罗嗦,先 ...
- jquery获得表格可见行的大小数量
alert($("#tableId").find("tbody tr[moban='true']").find(":visible").si ...