标签:shell 序列 输出 fedora 次数 错误 写入 命令替换 func
一.重定向操作会覆盖目标文件(先清空、再写入)
改用 >> 可实现追加重定向输出
2)重定向标准错误
使用 2> 可重定向错误信息
2>> 可实现追加输出
若希望将正常输出、错误输出重定向同一个文件,可使用 &>
< 输入
二.管道
借助于管道符“|”,可以将一条命令的标准输出交给另一条命令处理,在一条命令行内可依次使用多个管道。
例:# yum list | grep ftp |wc -l
三.脚本的格式
1.新建文件(扩展名。sh)
2.内容
#!解释器
#注释
3.执行xhmod +x
四.执行脚本的3类方法
1.需要权限
#chmod +x test.sh
#./test.sh
2.不需要权限开子进程
#bash test.sh
3.不需要权限不开子进程
五.变量
自定义变量
变量名=值
字母,数字,下划线,不能以数字开始
系统变量:
$PATH,$HOME,$PWD,$USER,$UID,$PS1
位置变量
echo $0 #脚本的名称
echo $1 #第一个参数
echo $2 #第二个参数
echo $* #所有参数
echo $# #所有的综合
echo $$ #当前进程的进程号
echo $? #上一个程序的返回状态码
六.三种引号对赋值的影响
1.双引""
界定一个完整字符串
# touch "aa bb" #创建了一个文件
2.单引‘‘
界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能
3.反撇号或$()的应用
使用反撇号或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换
七.read基本用法
read -p “提示信息” 变量名
定义变量,不赋值,谁用脚本,谁赋值
#vim /mnt/nsd
#!/bin/bash
read -p "请输入用户名:" user
read -p "请输入密码:" pass
useradd $user
echo "$pass" | passwd --stdin $user
八.整数运算工具
四则运算
加法 : num1 + num2
减法 : num1 - num2
乘法 : num1 num2
整除 : num1 / num2
取余数运算
求模: num1 % num2
echo $RANDOM 随机数
1)使用expr命令
乘法操作应采用 \ 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号
# expr $X + 78 //加法
1312
# expr $X - 78 //减法
1156
# expr $X \* 78 //乘法,操作符应添加\转义
96252
# expr $X / 78 //除法,仅保留整除结果
15
# expr $X % 78 //求模
64
2)使用$[ ]或$(())表达式
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。
# echo $[$X+78] //加法 (可加$也可不加)
1312
# echo $[X-78] //减法
1156
# echo $[X*78] //乘法
96252
# echo $[X/78] //除法,仅保留整除结果
15
# echo $[X%78] //求模
64
九.小数运算
小数运算工具
1)bc交互式运算
先执行bc命令进入交互环境,然后再输入需要计算的表达式
12.34+56.78 //加法
69.12
12.34-56.78 //减法
-44.44
12.34*56.78 //乘法
700.66
12.34/56.78 //除法
0
quit //退出交互计算器
2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响
18.018
# echo ‘scale=4;12.34-5.678‘ | bc
6.662
# echo ‘scale=4;12.34*5.678‘ | bc
70.0665
# echo ‘scale=4;12.34/5.678‘ | bc
2.1733
小数值的比较
基本用法
echo “数值1 比较符 数值2” | bc
如果表达式成立,,则返回的计算结果为1,否则返回0
常见比较操作: > 、>=、<、<=、==、!=
十.变量的自增/减等操作
使用$[ ]替换,或者let命令来完成
结合echo命令查看结果
i++ i=i+1
i-- i=i-1
i+=2 i=i+2
i-=2 i=i-2
i=2 i=i2
i/=2 i=i/2
i%=2 i=i%2
十一.条件测试操作
为命令执行提供最直接的识别依据
字符串匹配
比较整数值的大小
识别文件/目录的状态
多个条件/操作的逻辑组合
条件测试的基本用法
1)语法格式
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作)
主要用法:
命令一 操作符 命令二 .....
[条件1] 操作符 [条件2]
&& 给定条件必须都成立,整个测试结果才为真
|| 只要其中一个条件成立,则整个测试结果为真
检查当前系统cpu是64位还是32位
lscpu | grep x86_64
字符串测试
字符串比较
-z 字符串的值为空
-n 字符串的值不为空
== 两个字符串相同
!= 两个字符串不相同
整数值比较
-eq 等于
-ne 不等于
-ge 大于或等于
-le 小于或等于
-gt 大于
-lt 小于
文件状态测试
-e 判断对象是否存在,若存在则结果为真
-d 判断对象是否为目录,是则为真
-f 判断对象是否为一般文件,是则为真
-r 判断对象是否有可读权限,是则为真
-w 判断对象是否有可写权限,是则为真
-x 判断对象是否有可执行权限,是则为真
十二.使用for循环结构 (固定的循环)
for循环的语法结构如下所示
for 变量名 in 值列表 变量名控制次数,影响输出
do
命令序列
done
# vim chkhosts.sh
#!/bin/bash
for IP in {1..254}
do
ping -c 3 -i 0.2 -W 3 192.168.4.$IP &> /dev/null
if [ $? -eq 0 ] ; then
echo "Host 192.168.4.$IP is up."
else
echo "Host 192.168.4.$IP is down."
fi
done
十三.使用while循环结构 (不固定的循环)
while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环。
while 条件测试
do
命令序列
done
# vim udelwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
userdel -r ${PREFIX}$i &> /dev/null
let i++
done
十四.基于case分支编写脚本
case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。
case分支的语法结构如下所示:
case 变量值 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
默认命令序列
esac
# vim test.sh
#!/bin/bash
case $1 in
redhat)
echo "fedora";;
fedora)
echo "redhat";;
*) //默认输出脚本用法
echo "用法: $0 {redhat|fedora}"
exit 1
esac
十五.函数
使用Shell函数 (给一段代码取个别名)
在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率
1)函数的定义方法
格式1:
function 函数名 {
命令序列
.. ..
}
格式2:
函数名() {
命令序列
.. ..
}
2)函数的调用
直接使用“函数名”的形式调用,如果该函数能够处理位置参数,则可以使用“函数名 参数1 参数2 .. ..”的形式调用。
mkdir $1
cd $1
}
十六.中断/退出
中断 、 继续 、 退出
break 跳出当前所在的循环体,执行循环体后面的语句块
continue 跳过循环体内余下的语句,重新判断条件以决定是否需要执行下一次循环
exit 退出脚本,默认的返回值是0
for i in {1..5}
do
[ $i -eq 3 ] && continue
echo $i
done
echo over
标签:shell 序列 输出 fedora 次数 错误 写入 命令替换 func
原文地址:http://blog.51cto.com/13594742/2068918