大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖。
1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺带这学习shell 的语法:
什么时候helloworld是必不可少的,第一个脚本肯定与helloworld是离不开的:
#!/bin/sh a="hello world!" num=2 echo "a is : $a num is : ${num}nd"
运行结果: a is : hello world! num is : 2nd
shell脚本简单易懂,只要有一点点c语言的基础,这些都是小case;
2.下面带着大家学学if语句:
先抛出一个问题:写一个脚本,判断当前所用的shell
#!/bin/sh #注意if的空格以及[]里面的空格这里错了半天啊 if [ "$SHELL" = "/bin/bash" ];then echo "your login shell is the bash \n" echo "SHELL is : $SHELL" else echo "your login shell is not bash but $SHELL" fi #[ -f "somefile" ] : 判断是否是一个文件 #[ -x "/bin/ls" ] : 判断/bin/ls是否存在并有可执行权限 #{ -n "$var" } : 判断$var变量是否有值 #[ "&a" = "$b" ] : 判断$a和$b是否相等 [ -f "/etc/shadow" ] && echo "This computer uses shadow passwords" if [ -f "/etc/shadow" ];then echo "电脑密码使用隐藏字符" else echo "并没有" fi
#是注释的意思,相关部分已经在里面详细给大家注释解释了,注意if语句的格式
if[];then
elif[];then
else
fi
另外注意if语句还可以简单的用&&与||或语句来代替;另外如果想要深入了解if可以找男人test(在linux遇到问题要学会找男人解决,man)
3.为了让大家更加熟练的运用shell,那么练习下吧,问题:写一个脚本使其从一个文件里面读入有echo的语句,并把其写在本文件末尾;
#!/bin/sh #-r代表此文件是否可读,具体见man test mailfolder=/home/handsome/work/linux_learn/shell_learn/readme.txt #[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1;} #echo "$mailfolder has mail from : " #grep "^echo " $mailfolder if [ -r "$mailfolder" ];then echo "$mailfolder has massage from : " echo | grep '^echo ' $mailfolder >> readme2.txt chmod +r readme2.txt cat readme2.txt >> $mailfolder rm -f readme2.txt else echo "Can not read $mailfolder" touch $mailfolder chmod +rw $mailfolder echo "echo 人生自古谁无死,六区蛋清找旱情! " >> $mailfolder fi
这里由于重定向不能本文见输出到本文件输出,于是我就想了个办法,新建个文件,再重定向到这个文件,大神有别的简单方法可以下面留言拍砖;
4.接下来,我们练习下while的用法,老规矩具体问题来分析;
问题:写一个脚本(不建议使用for变量--for是根据空格取值)
1.设定变量FILE的值为/etc/passwd
2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID什么(Hello,root,your UID is0.)
3.统计一个有多少个用户
#!/bin/bash fl=/etc/passwd count=`cat $fl | wc -l` #下面是一个管道,下面循环读文件中的每一行 cat $fl | while read line do user=`echo $line|awk -F ':' '{print $1}'` #代表以 :分段$1就是取第1段 uid=`echo $line|awk -F ':' '{print $3}'` echo "hello, $user Your UID is $uid" done echo "====User_count:$count====" #前面求得的用户数
这里要注意到awk的用法,可以找linux的男人解决;
5.练习一下for语句吧
问题:写个脚本;
1.切换工作目录至/tmp
2.依次向/tmp目录中的每个文件或子目录问好(Hello,log)
3.统计/tmp目录下共有多个文件,并显示出来
1
2
3
4
5
6
7
8
|
#!/bin/bash cd /tmp for i in /tmp/*
do echo "Hello , $i"
done count=`ls -l|grep '^-' |wc -l`
echo "====file_count:$count===="
|
这个问题就相对简单了些,一个for语句就可以搞定,当然可以while搞搞
6.那么问题来了:
question:
传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商
#!/bin/bash a=$1 b=$2 [ -z $a ] && echo "please \$1 number1" && exit 1 [ -z $b ] && echo "please \$2 number2" && exit 2 [ ! $# -eq 2 ] && echo "--please num1 num2" && exit 3 # $#传递到脚本的参数个数 # -eq相当于=, -ne相当于不等于, -ge >= , -gt >, -le <=, -lt < echo "$a + $b = $(($a+$b))" echo "$a - $b = $(($a - $b))" echo "$a * $b = $(($a*$b))" echo "$a / $b = $(($a/$b))"
这里要注意的是,需要传入两个参数;
具体用到的一些知识请看下面:
读到这里大家对上面的小脚本是不是感觉特别easy了,哈哈;
7.写一个脚本;求1到100的和?
#!/bin/bash sum=0 i=1 while [ $i -le 100 ] do sum=$(($sum + $i)) i=$(($i+1)) done echo "$sum"
这个脚本就so easy了;
8.接下来,我们写个很实用的脚本吧,假设你现在在机房,你想要看看机房哪些ip在开着,方便咱。。。,是吧。
我们可以 通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线
#!/bin/bash for i in `seq 2 254` do ping -c1 -w1 192.168.51.$i > /dev/null 2>&1 #-c可以指定ping的次数,-w测试的时间 -w 1就是1秒中无论成功失败都结束 #-c -w后面都要输入参数所以都要带上l #$?代表最后命令退出状态,0代表没错,其他代表有错 [ $? -eq 0 ] && echo "192.168.51.$i IP is UP!" || echo "192.168.51.$i IP is down!" done
在这里2>&1代表不显示错误信息,其实就是把错误重定向到标准输出,然后重定向到/dev/null,/dev/null就是个黑洞,写入的任何东西都会丢失,其实简要说就是把正确或错误的输出扔到垃圾桶。
写到这里大家是不是感觉耳目一新呐,哈哈!
随笔练习:还有点bug
#/bin/bash i=1 sum=0 #while while [ $i -le 100 ] do ((sum=sum+i)) ((i=i+1)) done echo $sum #for sum=0 for ((j=1;j<=100;j++)) do ((sum=sum+j)) done echo $sum #select select flag in $@ do case $flag in $1)echo $1;; $2)echo $2;; $3)echo $3;; $4)echo $4;; *)echo "input error" break ;; esac done #shift echo -e "the all arg is\n" while [ $1 ] do echo $1 shift done #if num=`ls | wc -l` [ num == 0 ] && echo -e "have no file\n" || echo -e "there are $num files\n" for file in `ls` do echo "this file $file is " [ -f $file ] && echo -e "ordinary file" if [ -d $file ];then echo -e "dictionary file"; fi done #function filename="" rename(){ filename=echo `date` | awk -F ' ' '{print $1 $2 $3}' } rename echo -e "filename is $filename" [ $? == 0 ] && mkdir $filename || echo -e "have error\n"
相关推荐
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...
Shell脚本合集 Shell脚本是一种脚本语言,利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能。 Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释...
shell脚本编程100例 Shell脚本编程是一种强大的编程语言,广泛应用于Linux和Unix操作系统中。本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印...
Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...
我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...
Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...
Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...
shell脚本一个读写sd卡的案例,这个例子可以帮助出学者进步了解shell编程
有关几个shell脚本的编写,如:编写一个shell脚本程序,它带一个命令行参数,这个参数是一个文件。如果这个文件是一个普通文件,则打印文件所有者的名字和最后的修改日期...加入了自己的注释理解
### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...
Makefile 中的 shell 每一行是一个进程,不同行之间变量值不能传递,所以,Makefile 中的 shell 不管多长都要写在一行。Makefile 中变量以 $ 开头,为了避免和 shell 变量冲突,Makefile 中 shell 变量以 $$ 开头。 ...
通过阅读和实践"shell脚本大全"中的例子,你可以逐步掌握这些概念,并学会如何编写自己的脚本来提高工作效率。无论是在系统管理、自动化任务,还是在数据分析等领域,Shell脚本都发挥着重要的作用。记得实践是掌握...
**C语言中文网shell脚本教程** 这是一份关于Shell脚本编程的离线学习资料,包含了一系列HTML文件,旨在帮助用户深入理解并掌握Linux Shell脚本编程技术。以下是其中涉及的一些关键知识点: 1. **Shell命令的本质**...
10. **异常处理**:在调用shell脚本时,要处理可能出现的IOException、InterruptedException等异常,确保程序的健壮性。 以上就是关于在Android系统中调用shell脚本的一些关键知识点。实践中,开发者需要根据具体...
Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...
在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...
《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...