xshell脚本简单代码_Xshell脚本

Xshell 常见脚本编译细节问题

#! /bin/bash 指令下

1.关于 test命令后面空格

2.if语句后面 then前的分号 调试有时不可省略

3.参数分隔的空格问题不可忽略!不可缺少!

4.将.txt文件修改成.doc类型时 只能提取文件名 通过mv命令修改文件后缀.doc

1、编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?

#! /bin/bash

fname=/bin/date

if (test –f “$fname”); then

echo “exist”

fi

2、编写一个名为greet的问候程序,执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。

#! /bin/bash

hour=`date|cut –c 19-20`

if test “$hour” –ge 0 –a “$hour” –lt 12; then

echo “Good morning!”

elif test “$hour” –ge 12 –a “$hour” –le 18; then

echo “Good afternoon!”

else

echo “Good evening!”

fi

3、编写一个名为ifuser的程序,它执行时带用户名作为命令行参数,判断该用户是否已经在系统中登录,并给出相关信息。

#! /bin/bash

if test $# -ne 1; then

echo "Incorrect number of arguments"

echo "Usage: ifuser username"

else

user=$1

if who | grep -q $user ; then

echo $1 "user is logged on."

exit 0

else

echo $1 "user is not logged on."

exit 1

fi

fi

4、编写一个名为menu的程序,实现简单的弹出式菜单功能,用户能根据显示的菜单项从键盘选择执行对应的命令。

#! /bin/bash

clear

echo "  -----------------MENU------------------"

echo

echo "  1.Find files modified in last 24 hours"

echo "  2.The free disk space"

echo "  3.Space consumed by this user"

echo "  4.Exit"

echo

echo -n "  Select:"

read choice

case $choice in

1)find $HOME -mtime -1 -print;;

2)df;;

3)du -s $HOME;;

4)exit;;

*)echo "Invalid option"

esac

5、编写一个名为chname的程序,将当前目录下所有的.txt文件更名为.doc文件。

#! /bin/sh -

for file in *.txt

do

leftname=`basename $file .txt`

mv $file $leftname.doc

done

6、编写一个名 为chuser的程序,执行中每隔5分钟检查指定的用户是否登录系统,用户名从命令行输入;如果指定的用户已经登录,则显示相关信息。

#! /bin/sh –

if test $# -ne 1

then

echo “Usage: chuser username”

else

user=”$1”

until who |grep “$user”

do

sleep 300

done

echo “$user has logged on!”

fi

7、求1到100的和

#! /bin/bash

i=0

n=1

while [ $n -lt 101 ];do

i=(( $i + $n ))

n=(( #n + 1  ))

done

echo $i

1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺带这学习shell 的语法:

什么时候helloworld是必不可少的,第一个脚本肯定与helloworld是离不开的:

#!/bin/sh

a="hello world!"num=2echo "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"

elseecho "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 "电脑密码使用隐藏字符"

elseecho "并没有"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

elseecho "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 |

whileread line

douser=`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目录下共有多个文件,并显示出来

这个问题就相对简单了些,一个for语句就可以搞定,当然可以while搞搞

6.那么问题来了:

question:

传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商

#!/bin/bash

a=$1b=$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

这里要注意的是,需要传入两个参数;

具体用到的一些知识请看下面:

读到这里大家对上面的小脚本是不是感觉特别easy了,哈哈;

7.写一个脚本;求1到100的和?

#!/bin/bash

sum=0i=1

while [ $i -le 100]

dosum=$(($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`

doping -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=1sum=0#while

while [ $i -le 100]

do((sum=sum+i))

((i=i+1))

done

echo $sum

#forsum=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]

doecho $1shift

done

#ifnum=`ls | wc -l`

[ num == 0 ] && echo -e "have no file\n" || echo -e "there are $num files\n"

for file in`ls`

doecho "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环境下多试下就明白了:

$0 这个程式的执行名字

$n 这个程式的第n个参数值,n=1..9

$* 这个程式的所有参数,此选项参数可超过9个。

$# 这个程式的参数个数

$$ 这个程式的PID(脚本运行的当前进程ID号)

$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)

$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

$- 显示shell使用的当前选项,与set命令功能相同

$@ 跟$*类似,但是可以当作数组用

脚本本身的名字,$1是你给你写的shell脚本传的第一个参数,$2是你给你写的shell脚本传的第二个参数

比如你新建了一个shell脚本 Test.sh, 内容如下:

#!/bin/sh

echo "shell脚本本身的名字: $0"

echo "传给shell的第一个参数: $1"

echo "传给shell的第二个参数: $2"

1

2

3

4

保存退出后,你在Test.sh所在的目录下输入 bash Test.sh 1 2

结果为:

shell脚本本身的名字: Test.sh

传给shell的第一个参数: 1

传给shell的第二个参数: 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值