博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三部分shell编程3(shell脚本2)
阅读量:5046 次
发布时间:2019-06-12

本文共 2902 字,大约阅读时间需要 9 分钟。

7. if 判断一些特殊用法

if [ -z $a ] 这个表示当变量a的值为空时会怎么样
if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样
if [ ! -e file ]; then 表示文件不存在时会怎么样
if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

if [ ! $a -gt 0 ];then... 代表不大于0

if [ -z $n1 ] 为空

if [ -n $n1 ] 不为空
if [ ! -z $n1 ]

8. shell中的case判断

格式: case 变量名 in
value1)
command
;;
value2)
command
;;
*)
commond
;;
esac

求余!!
vim case.sh
!# /bin/bash
n1=`echo $1 |sed 's/[0-9]//g'`
if [ -z $n1 ]; then
m=$[$1%2]
case $m in
1)
echo "the number is odd"
;;
0)
echo "the number is even"
;;
*)
echo "is other"
;;
esac
else
echo "the character you input not a number"
fi

sh case.sh 6 $1代表第一个参数

9. shell脚本中的循环

for循环 语法结构: for 变量名 in 条件; do … done
while 循环语法结构: while 条件; do … done 死循环用:表示
break直接结束本层循环(跳出整个循环); continue忽略continue之下的代码(跳出本次循环),直接进行下一次循环
exit 直接退出shell

序列

seq 1 [步长] 10 默认是1
seq 1 10
seq 10 -1 1
seq 10 -2 1
seq 1 2 10

seq -w 1 100 宽度一样 ============

001
002
...
100
===============
vim for.sh
!# /bin/bash
for i in `seq 1 10`
do
echo $i
done

==========

vim for.sh
!# /bin/bash
for file in `ls`
do
ls -ld $file
done

=========

vim for.sh
!# /bin/bash
sum=0
for n in `seq 1 100`
do
sum=$[$sum+$n]
done
echo $sum

==========while死循环

vim while.sh
!# /bin/bash
n1=1 这里可以是任意值
while [ ! -z $n1 ]
do
read -p "input a number:" n
n1=`echo $n |sed 's/[0-9]//g'`
done
echo "the number is $n."
===========
vim break.sh
!# /bin/bash
for i in 1 2 3 4 5
do
echo $i
if [ $i -eq 3 ]
then
break
fi
echo $i
done

 

 

10. shell中的函数
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
格式: function f_name() {
command
}
函数必须要放在最前面
函数里可以export 全局变量
===============
function mysum() {
sum=$[$1+$2]
echo $sum
}
s=`mysum 1 2`
echo $s
===============
function mysum() {
sum=$[$1+$2]
return $sum
}
mysum 1 2
echo $?
=============
function mysum() {
sum=$[$1+$2] 如果在sum前面加local就在函数里面生效
}
mysum 1 10
echo $sum
===========

11. shell练习题

编写shell脚本,计算1-100的和;
编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

vim sum.sh

!# /bin/bash
if_nu() {
n1=`echo $1|sed 's/[0-9]//g'`
if [ -z $n1 ]
then
if [ $1 -gt 1 ]; then return 1; else return 0;fi
else
return 0
fi
}

read -p "input a number :" n

if_nu $n
n2=`echo $?`
if [ $n2 -eq 1 ]
then
sum=0
for i in `seq 1 $n`
do
sum=$[$sum+$i]
done
echo $sum
else
echo "the character you input is not number"
fi

 

编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;

find /root -maxdepth 1 -type d 搜索root下的一级目录
===========
for d in `ls /root/`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done

for d in `find /root -maxdepth 1 -type d`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done

编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组;

for i in `seq -w 0 99`; do useradd -g users user_$i; done

编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

awk -F: '/abc/ {print $1}' test.log |sort |uniq -c |sort -n |awk '$1>10'

 

转载于:https://www.cnblogs.com/chenshoubiao/p/4854984.html

你可能感兴趣的文章
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>