文档库 最新最全的文档下载
当前位置:文档库 › 实验十三 shell脚本练习

实验十三 shell脚本练习

实验十三 shell脚本练习
实验十三 shell脚本练习

上机实验内容:

1、请编写一个脚本,其功能是将当前用户的根目录下的work目录打包为名为“user’s-workdir-in-YYMMDD”的tar包(提示:参考用date建立文件)

要求:i)若该目录不存在,显示“dir not exist”

ii)若该文件不是目录类型,显示“work is a type”,此处的type为文件类型

#!/bin/bash

[ -e /work ] && tar -cvf "User's-workdir-in-`date +%Y%m%d`.tar" /work || echo "dir not exist"

declare filetype=""

[ -f /work ] && filetype="常规文件"

[ -d /work ] && filetype="目录文件"

[ -b /work ] && filetype="块设备文件"

[ -c /work ] && filetype="字符设备"

[ -S /work ] && filetype="套接字文件"

[ -p /work ] && filetype="FIFO(管道)文件"

[ -L /work ] && filetype="连接文件"

[ "$filetype" != "" ] && echo "work is a $filetype"

2、编写一个脚本,其中包含一个打印函数,用于将多次输入的字符组合为一个字符串

要求:i)使用函数实现新值的输出

ii)使用循环语句完成多个字符的输入,直到输入字符串EOF才完成字符串的累加#!/bin/bash

function add(){

str="$str"$input

echo $str

}

read -p "请输入一个字符串或者输入EOF结束本次操作:" input

declare str

while [ "$input" != "EOF" ]

do

add

read -p "请输入一个字符串或者输入EOF结束本次操作" input

done

3、自我练习:设计一个运算器,实现“加、减、乘、除”功能。

(四则运算:符号使用+、-、*、/)

#!/bin/bash

read -p "请输入第一个数:" n1

read -p "请输入一个操作运算符(+、-、*、/):" fuhao

read -p "请输入第二个数:" n2

declare -i result

if [ "$fuhao" == "+" ];then

result=$(($n1+$n2))

echo "$n1$fuhao$n2=$result"

elif [ "$fuhao" == "-" ];then

result=$(($n1-$n2))

echo "$n1$fuhao$n2=$result"

elif [ "$fuhao" == "*" ];then

result=$(($n1*$n2))

echo "$n1$fuhao$n2=$result"

elif [ "$fuhao" == "/" ];then

result=$(($n1/$n2))

echo "$n1$fuhao$n2=$result"

else

echo "您的运算符输入错误"

fi

4、编写一个脚本,求1到99中所有奇数的和。

#!/bin/bash

#

declare -i i=1

declare -i sum=0

until [ $i -gt 100 ]

do

if [ $(($i%2)) -eq 1 ];then

sum=$(($sum+$i))

i=$(($i+1))

else

i=$(($i+1))

continue

fi

done

echo "The sum is : $sum."

5、撰写一支程式,他的作用是:

i) 先查看一下/root/test/logical 这个名称是否存在;

ii) 若不存在,则建立一个档案,使用touch 来建立,建立完成后离开;

iii) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为logical ,之后离开;

iv) 如果存在的话,而且该名称为目录,则移除此目录!

#!/bin/bash

input="/root/test/logical"

if [ -e "$input" ];then

echo "$input存在"

if [ -f "$input" ];then

echo "$input为文件,删除该文件,重建该文件"

rm $input

touch /root/test/logical

elif [ -d "$input" ];then

echo "$input为目录,删除$input目录"

rmdir "$input"

fi

else

echo "$input不存在,建立该文档"

mkdir /root/test

touch /root/test/logical

fi

6、自我练习:判断两个给定文件的新旧程度

要求:i)用户输入两个文件的名称

ii)分别判断这两个文件是否存在

iii)判断这两个文件的类型是否相同

iv)判断这两个文件的拥有者操作权限是否相同

v)若这两个文件都存在,且类型和操作权限都相等,则将较新的文件复制到目录/tmp 中,若两者的时间相同,则不做复制操作

#!/bin/bash

type1=""

type2=""

right1=""

right2=""

read -p "请输入第一个文件的路径:" f1

if [ ! -e "$f1" ];then

echo "$f1不存在,请检查后重试"

exit 1

fi

read -p "请输入第二个文件的路径:" f2

if [ ! -e "$f2" ];then

echo "$f2不存在,请检查后重试"

exit 1

fi

[ -f "$f1" ] && type1="regulare file"

[ -d "$f1" ] && type1="directory"

[ -r "$f1" ] && right1="$right1"r

[ -w "$f1" ] && right1="$right1"w

[ -x "$f1" ] && right1="$right1"x

echo "文件1的类型是$type1"

echo "文件1的权限是$right1"

[ -f "$f2" ] && type2="regulare file"

[ -d "$f2" ] && type2="directory"

[ -r "$f2" ] && right2="$right2"r

[ -w "$f2" ] && right2="$right2"w

[ -x "$f2" ] && right2="$right2"x

echo "文件2的类型是$type2"

echo "文件2的权限是$right2"

[ "$type1" == "$type2" ] && echo "$f1和$f2的文件类型相同" || echo "$f1和$f2的文件类型不同"

[ "$right1" == "$right2" ] && echo "$f1和$f2的文件权限相同" || echo "$f1和$f2的文件权限不同"

if [ "$type1" == "$type2" -a "$right1" == "$right2" ];then

if [ "$f1" -nt "$f2" ];then

cho "将$f1复制到/tmp中"

cp -r "$f1" "/tmp/$f1"

elif [ "$f1" -ot "$f2" ];then

echo "将$f2复制到/tmp中"

cp -r "$f2" "/tmp/$f2"

fi

fi

7、请自行建立一个脚本,该脚本可以用来计算『您还有几天可以过生日』啊??#!/bin/bash

read -p "请输入你的生日(MMDD, 比如0709): " bir

now=`date +%m%d`

if [ "$bir" == "$now" ];then

echo "祝你生日快乐!!!"

elif [ "$bir" -gt "$now" ];then

year=`date +%Y`

total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24+1))

echo "你的生日还有$total_d天"

else

year=$((`date +%Y`+1))

total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24+2))

echo "你的生日还有$total_d天"

fi

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

Shell 经典实例

Thizlinux 系统教程 Shell 经典实例 ----------------Milo 经典小shell 1 列目录树的shell 脚本如下: #!/bin/sh # dtree: Usage: dtree [any directory] dir=${1:-.} (cd $dir; pwd) find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g" 2 while中使用read (file是一个文件) cat file | while read line do echo $line echo " :: Please input any key(s):c" str4read="" while true do chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null` str4read=$str4read$chr4read if [ "$chr4read" = "" ] ;then break; fi

done echo " :: |$str4read|" done 3 将多个空格替换为字符 sed 's/[ ][ ]*/ /g' 如果空格与tab共存时用 sed -e 's/[[:space:]][[:space:]]*/ /g' filename 4用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi

linux的shell脚本实验报告

第二次实验内容 一、实验名称:Linux下shell编程 二、实验类型:设计 三、实验目的: 1.熟悉Linux的shell几种变量使用 2.熟练掌握Linux的shell编程几种结构 3.熟练掌握Linux下shell脚本的编写 四、实验准备 参考教材,课件第7章内容及笔记。要求实验内容全部写到实验报告上(B5纸)。 五、实验内容 1. 练习使用shell四种变量,参考课件例题。 用户自定义变量,环境变量,位置变量,特殊变量这四种变量类型的使用,书中有例题。 2. 调试课件所有shell脚本的例题。 3. 编写如下脚本: ●编写脚本if1,测试其功能。 echo -n "word 1: " read word1 echo -n "word 2: " read word2 if test "$word1" = "$word2" then echo "Match" fi echo "End of program." ●编写脚本chkargs,测试其功能 if test $# -eq 0 then echo "You must supply at least one argument." exit 1 fi echo "Program running." ●编写脚本if2,测试其功能 if test $# -eq 0

then echo "You must supply at least one argument." exit 1 fi if test -f "$1" then echo "$1 is a regular file in the working directory" else echo "$1 is NOT a regular file in the working directory" fi ●编写脚本if3,测试其功能 echo -n "word 1: " read word1 echo -n "word 2: " read word2 echo -n "word 3: " read word3 if [ "$word1" = "$word2" -a "$word2" = "$word3" ] then echo "Match: words 1, 2, & 3" elif [ "$word1" = "$word2" ] then echo "Match: words 1 & 2" elif [ "$word1" = "$word3" ] then echo "Match: words 1 & 3" elif [ "$word2" = "$word3" ] then echo "Match: words 2 & 3" else echo "No match" fi ●编写smartzip 脚本,测试其功能 #!/bin/bash ftype=`file "$1"` case "$ftype" in "$1: Zip archive"*) unzip "$1" ;; "$1: gzip compressed"*)

shell脚本练习题

shell 脚本例子集锦(习题总结) 练习一:写一个脚本 1. 设定变量FILE 的值为/etc/passwd 2. 依次向/etc/passwd 中的每个用户问好,并且说出对方的ID 是什么 形如:(提示:LINE='wc -l /etc/passwd | cut -d" " -fl') Hello,root , your UID is 0. 3. 统计一个有多少个用户 答案一:#!/bin/bash file="/etc/passwd" LINES='wc -l $file | cut -d" " -f1' for I in 'seq 1 $LINES';do userid='head -$I $file | tail -1 |cut -d: -f3' username='head -$I $file | tail -1 |cut -d: -f1' echo "hello $username,your UID is $userid" done echo "there are $LINES users" 答案二:#!/bin/bash file=/etc/passwd let num=0 for I in 'cat $file';do username='echo "$I" | cut -d: - f1' userid='echo "$I" | cut -d: -f3' echo "Hello,$username,your UID is $userid" num=$[$num+1] done echo "there are $num users" 练习二:写一个脚本 1. 切换工作目录至/var 2. 依次向/var 目录中的每个文件或子目录问好,形如: (提示:for FILE in /var/*; 或for FILE in 'ls /var';) Hello,log 3. 统计/var 目录下共有多个文件,并显示出来 答案:#!/bin/bash cd /var let num=0 for I in 'ls /var/*';do echo "hello $I" num=$[$num+1] done echo "the number of files is $num" 练习三:写一个脚本 1. 设定变量file 的值为/etc/passwd 2. 使用循环读取文件/etc/passwd 的第2,4,6,10,13,15 行,并显示其内容 3. 把这些行保存至/tmp/mypasswd 文件中答案:#!/bin/bash file="/etc/passwd" for I in 2 4 6 10 13 15;do exec 3>/tmp/mypasswd

linux脚本实例

1.写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。 #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 2.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 #!/bin/sh case ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type" esac 3.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。 #!/bin/sh RPM=/bin/rpm option="-q" while true do echo "what to query?" select var in "All" "file" "package name" do case $var in All) option=$option"a" break ;; file) echo -n "please input file name: "

经典shell 脚本实例

Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

shell 脚本入门笔记

#!/bin/bash 放在第一行用于告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。文件保存为**.sh。 执行方式: 1.chmod777 test.sh ./test.sh 2./bin/sh test.sh echo 用于向窗口输出文本 定义变量时,变量名不加$符号。 例如:your_name="https://www.wendangku.net/doc/638582548.html," 还可以使用语句进行赋值: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将/etc 下目录的文件名循环出来。 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx"

echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,建议给所有变量加上花括号。 只读变量 readonly+变量名 删除变量 unset+变量名不能删除只读变量 Shell 字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP 类似。 单引号 str='this is a string' 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。 双引号 your_name='qinjx'

str="Hello, I know you are \"$your_name\"! \n" 双引号的优点: 双引号里可以有变量 双引号里可以出现转义字符 拼接字符串 your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 获取字符串长度 string="abcd" echo ${#string} 输出4 提取子字符串 以下实例从字符串第2 个字符开始截取4 个字符:string="runoob is a great site" echo ${string:1:4} 输出unoo 查找子字符串

shell脚本语句练习题

Shell脚本练习题 1、编写shell脚本,计算1-100的和 1#!/bin/bash 2 #caculate the sum of numbers from 1 to 100 3 4 sum=0 5 for i in `seq 1 100`; do 6 sum=$[$sum+$i] 7 done 8 echo $sum 2、编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,输入的数字小于1则重新输入,直到输入正确的数字为止。 1 #! /bin/bash 2 j=0 3 while [ $j -lt "1" ]; do 4 read -p "请输入数字不能小于"1":" j 5 done 6 sum=0 7 for i in `seq 1 $j`;do 8 sum=$[$i+$sum] 9 done 10 echo $sum 3、编写shell脚本,把/root/目录下的所有目录拷贝到/tmp/目录下。 1.#! /bin/bash 2.for i in `ls /root/`;do 3.if [ -d $i ];then 4.cp -r $i /tmp/ 5.fi 6.done 4、编写shell脚本,批量建立用户user_00,user_01,…,user_100并且所有用户属于users组。 1.#! /bin/bash 2.i=0 3.for i in `seq 1 100`;do https://www.wendangku.net/doc/638582548.html,erdel -r user_0$i 5.done 5、编写shell脚本,截取文件test.log中包含关键词”abc”的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列。 1.#! /bin/bash 2.awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt 3.sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt 4.awk '$1>10 {print $2}' /tmp/n2.txt

Shell 脚本面试题及答案

Shell 脚本面试题及答案 一、Shell脚本是什么、它是必需的吗? 一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。 二、什么是默认登录shell,如何改变指定用户的登录shell? 在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。 三、可以在shell脚本中使用哪些类型的变量? 在shell脚本,我们可以使用两种类型的变量:①系统定义变量;②用户定义变量。 系统变量:是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。 用户变量:是由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。 四、如何将标准输出和错误输出同时重定向到同一位置? 这里有两个方法来实现: 方法一:2>&1 (如# ls /usr/share/doc > out.txt 2>&1 ) 方法二:&> (如# ls /usr/share/doc &> out.txt ) 五、shell脚本中“$?”标记的用途是什么? 在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。 六、如何在后台运行脚本? 在脚本后面添加“&”。 七、"chmod 500 script" 做什么? 使脚本所有者拥有可执行权限。 八、">" 做什么? 重定向输出流到文件或另一个流。 九、& 和 && 有什么区别

实验十四 shell脚本练习

实验十四shell脚本练习 上机实验内容: 打开终端后在[root@localhost ~]#后面输入自己名字 一、基础题 练习一:shell脚本初步 1)在家目录下新建目录script 2)编写第一个shell脚本,命名为sh01,并存放在/root/script目录中,脚本执行 后要求在屏幕上显示当前用户的的用户名、家目录和uid, 3)以2-3种方式来执行该脚本 4)编写第一个shell脚本,命名为sh02,并存放在/root/script目录中,要求执行 后,打印一行提示“Please input your name:",要求用户输入,然后再次打印一 行提示“Please input your sex: "要求用户输入,最后在屏幕上显示姓名和性别。练习二:shell脚本编写 1、请编写一个脚本,其功能是将当前用户的根目录下的work目录打包为名为“user’s-workdir-in-YYMMDD”的tar包(提示:参考用date建立文件) 要求:i)若该目录不存在,显示“dir not exist” ii)若该文件不是目录类型,显示“work is a type”,此处的type为文件类型 2、编写一个脚本,其中包含一个打印函数,用于将多次输入的字符组合为一个字符串 要求:i)使用函数实现新值的输出 ii)使用循环语句完成多个字符的输入,直到输入字符串EOF才完成字符串的累加3、自我练习:设计一个运算器,实现“加、减、乘、除”功能。 (四则运算:符号使用+、-、*、/) 4、编写一个脚本,求1到99中所有奇数的和。 5、撰写一个脚本,他的作用是: i) 先查看一下/root/test/logical 这个名称是否存在; ii) 若不存在,则建立一个档案,使用touch 来建立,建立完成后离开; iii) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为logical ,之后离开; iv) 如果存在的话,而且该名称为目录,则移除此目录! 6、编写一个脚本,判断两个给定文件的新旧程度 要求:i)用户输入两个文件的名称 ii)分别判断这两个文件是否存在 iii)判断这两个文件的类型是否相同 iv)判断这两个文件的拥有者操作权限是否相同 v)若这两个文件都存在,且类型和操作权限都相等,则将较新的文件复制到目录/tmp 中,若两者的时间相同,则不做复制操作 二、提高题 1、请自行建立一个脚本,该脚本可以用来计算『您还有几天可以过生日』啊??

如何做才能学好Shell脚本的经验总结

如何做才能学好Shell脚本的经验总结 大多同学反馈Shell脚本不容易学,感觉学完了Shell脚本这部分课程,还是不能写出脚本来。我来帮大家分析一下原因,并解说如何做才能学好Shell脚本。 之所以你觉得难学,写不出东西来。是因为,太生疏。写Shell脚本其实跟婴儿学走步,学骑自行车或者学游泳一样,这是一个熟练活儿。 要想写出一手漂亮的脚本,我总结了以下几点: 1 打好基本功 Shell脚本,本质上是多条Linux系统命令加上逻辑(条件、循环)构成的一个文本文档。要想实现一个需求,只要你可以用系统命令实现,那Shell脚本就可以实现。如果你Linux 命令都不会,那怎么能写出脚本来? 2 学好正则 如果你多写几个Shell脚本,就会发现,好多需求是从一个大字符串里截取出小字符串。这就需要你对正则表达式十分熟练,操作正则的几个工具也要熟练使用(grep/sed/awk)。 3 逻辑思维能力 大型的Shell脚本中,有很强的逻辑,条件满足时做什么,不满足时做什么。条件里面还可以嵌套条件,也可以嵌套循环(for、while等)。 这种逻辑能力并不是我们生来具备的,它是需要不断练习、长期积累出来的功力。 你可能会问,哪里有那么多的脚本需求?关键是没有机会练习啊。是的,这的确是个问题,尤其是正在学习阶段的同学,平时哪里有什么需求啊。要是上班了还好,每天有很多工作做,生产环境中也有不少需求用Shell脚本来实现。 对于学习阶段的同学,我考虑到你们的处境,所以去年花了几个月时间,在公众号里坚持每日发一个Shell练习题,这些资源你可以利用起来。其实,有不少同学只坚持了一个月就已经感觉到了明显的提升。

实验4 SHELL脚本的编写(一)

广东技术师范学院实验报告 学院:计科院专业:班级:成绩: 姓名:学号:组别:组员: 实验地点:实验日期:指导教师签名: 实验4项目名称:SHELL脚本的编写(一) 1、实验目的 通过对典型的SHELL脚本进行验证,以及编写具有一定实用程度的SHELL 脚本,理解并掌握SHELL脚本的基本编写方法。 2、实验内容 2.1什么是shell脚本 要明白什么是shell脚本,首先要理解什么是脚本(script)。脚本是指一种未经编译而直接解释执行的程序,最典型例子就是javascript程序。我们知道,程序代码写好后,有两种方式让它执行。一是通过编译器编译成二进制执行代码后提交给系统执行,而另一种则不经过编译,直接送给解释器解释执行。 shell脚本指的就是一种通过shell来解释并执行的程序。UNIX中的shell,它既是一个界面程序,又是一个脚本的解释器,同时又能提供一种功能丰富的脚本语言供用户编写脚本程序。用户只需要通过vi等编辑器将脚本编写好(脚本本身上还是一个文本),通过命令行的形式提交给shell,shell便会对其解释并执行了。 2.2 shell脚本与系统管理 Shell脚本在系统管理上占有重要的位置。原因在于系统管理的日常工作许多都是常规化的,例如日志管理、重要数据备份、账户管理、文件系统清理等工作,一次性地编写一个管理脚本程序,就能避免重复的管理工作。当然,现在有许多管理工具供管理员使用,不是任何工作都需要编写一个shell脚本。不过任何一个管理工具都不可能为特定某个应用业务度身定制,针对当前应用业务的需要编写shell脚本属于高级系统管理员应具备的能力。 此外,有一个问题值得讨论,利用其它高级语言也一样可以写管理程序,为什么要用shell脚本语言?这在于shell脚本最终提交给shell解释执行,因此可直接在程序中使用各种shell命令(c程序是不可能这样做的)。这些shell命令从操作系统管理的角度来看,都涉及到系统资源申请、使用和释放,shell脚本只通过简单的命令即可实现,而高级语言却需要复杂的、大量的系统API函数调用。同学们回顾之前实验中的作业题,每一题只需一到两条shell命令即可完成,但如果用c语言编写相应的程序,也许不可能几条语句就可以实现的了。 关于shell脚本的编写是一个很大的话题,本实验介绍基本的shell程序编写,

常用shell脚本

如何用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi #TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize let pieces=$filesize/$size let remain=$filesize-$pieces*$size if [ $remain -gt 0 ]; then let pieces=$pieces+1 fi echo pieces: $pieces i=0 while [ $i -lt $pieces ]; do echo split: $file.$i: dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1 done echo "#!/bin/bash" >; merge echo "i=0" >;>; merge echo "while [ $i -lt $pieces ];" >;>; merge echo "do" >;>; merge echo " echo merge: $file.$i" >;>; merge echo " if [ ! -f $file.$i ]; then" >;>; merge echo " echo merge: $file.$i missed" >;>; merge

shell脚本练习题

shell脚本例子集锦(习题总结) 练习一:写一个脚本 1.设定变量FILE的值为/etc/passwd 2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`) Hello,root,your UID is 0. 3.统计一个有多少个用户 答案一:#!/bin/bash file="/etc/passwd" LINES=`wc -l $file | cut -d" " -f1` for I in `seq 1 $LINES`;do userid=`head -$I $file | tail -1 |cut -d: -f3` username=`head -$I $file | tail -1 |cut -d: -f1` echo "hello $username,your UID is $userid" done echo "there are $LINES users" 答案二:#!/bin/bash file=/etc/passwd let num=0 for I in `cat $file`;do username=`echo "$I" | cut -d: -f1` userid=`echo "$I" | cut -d: -f3` echo "Hello,$username,your UID is $userid" num=$[$num+1] done echo "there are $num users" 练习二:写一个脚本 1.切换工作目录至/var 2.依次向/var目录中的每个文件或子目录问好,形如: (提示:for FILE in /var/*;或for FILE in `ls /var`;) Hello,log 3.统计/var目录下共有多个文件,并显示出来 答案:#!/bin/bash cd /var let num=0 for I in `ls /var/*`;do echo "hello $I" num=$[$num+1] done echo "the number of files is $num" 练习三:写一个脚本

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

Linux复习试题

Linux复习试题 一.填空题 1.vi编辑器具有两种工作模式,------------和--------------。命令模式和输入模式 2.链接分为------------和-------------- 。链接分为硬链接和符号链接;删除原文件,硬链接文件内容仍保留;硬链接和符号连接都是产生一个新的链接文件'; 硬连接只能建立对文件链接。符号链接可以跨不同文件系统创建。 3.我们可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占--1---位,表示--文件类型-----------,第二段占3位,表示-文件所有者----------对该文件的权限。 4. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为----644----------,该文件属性是--目录------------。 5. 唯一标识每一个用户的是---用户ID-----------和用户名。 6. 将前一个命令的标准输出作为后一个命令的标准输入,称之为----管道----------。 7. 在用vi编辑文件时,将文件内容存入test.txt文件中,应在命令模式下键入w test.txt ----------。 8.在shell编程时,使用方括号表示测试条件的规则是:方括号两边必须有----空格----------。 9.在Linux系统下,第二个IDE通道的硬盘(从盘)被标识为----hdb----------。10.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式-tar zcvf /home/wang.tar.gz /home/stud1/wang 。-------------。 11.管道就是将前一个命令的---标准输出-----------作为后一个命令的--标准输入------------。 12.shell不仅是--用户命令------------,它同时也是一种功能强大的编程语言。-------bash-------是Linux的缺省shell。 13.增加一个用户的命令是---adduser 或useradd-----------。 14.用--- >;>; -----------符号将输出重定向内容附加在原文的后面。 15. Linux系统中有两块IDE硬盘,第一块硬盘分为三个分区,则第三个分区表示为-------------,第二块硬盘分为五个分区,则第三个分区表示为------------。16.Linux系统安装完后要配置网卡等信息,其中/etc/sysconfig------------是网络配置文件,保存着IP、网关和域名等信息。 17.Linux系统支持多分区,根据分区的功能,------------是存放所有用户的主目录,------------是交换分区,------------是根目录,------------存放临时文件。 二.判断题 1.进行linux安装,必须由光盘启动并且直接由光盘安装。 2.在shell脚本文件中可以进行命令替换,被替换的命令需要用单引号括起来。3.LINUX是一个真正的多任务和分时操作系统,允许多个用户在相同的机器上一次运行很多程序。 4. 采用webmin软件可以远程对Linux系统进行管理。【】

Shell脚本-Demo-29例

【例子:001】判断输入为数字,字符或其他 1.#!/bin/bash 2.read -p "Enter a number or string here:" input 3.case $input in 4. [0-9]) echo -e "Good job, Your input is a numberic! \n" ;; 5.[a-zA-Z]) echo -e "Good job, Your input is a character! \n" ;; 6. *) echo -e "Your input is wrong, input again! \n" ;; 7.esac 【例子:002】求平均数 1.#!/bin/bash 2.# Calculate the average of a series of numbers. 3.SCORE="0" 4.AVERAGE="0" 5.SUM="0" 6.NUM="0" 7.while true; do 8. echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE; 9. if (("$SCORE" < "0")) || (("$SCORE" > "100")); then 10. echo "Be serious. Common, try again: " 11. elif [ "$SCORE" == "q" ]; then 12. echo "Average rating: $AVERAGE%." 13. break 14. else 15. SUM=$[$SUM + $SCORE] 16. NUM=$[$NUM + 1] 17. AVERAGE=$[$SUM / $NUM] 18. fi 19.done 20.echo "Exiting." 【例子:003】自减输出 1.[scriptname: doit.sh] 2.while (( $# > 0 )) 3.do 4. echo $* 5. shift 6.done 7./> ./doit.sh a b c d e 8. a b c d e 9. b c d e 10.c d e

很实用的Shell脚本(实践版)

很实用的Shell脚本(实践版)

/erpHome/shell/old/$1/$2.zip.old find . -mtime +7 | xargs nice -n 20 zip -qm /erpHome/shell/old/$1/$2_$DayOfWeek.zip # find . -mtime +7 Fi archiveOld2.sh . /erpHome/shell/setP.sh export DayOfWeek=`date +"%u"`

if test "$#" -lt 1 || test -z "$1" then echo At least one argument needed. exit fi if test ! -e "$ShellHome/old/$1" then cd $ShellHome/old/ mkdir -p $1 fi if test ! -e "$ERPHome/$1" then echo "$ERPHome/$1" "does not exist" exit fi cd $ERPHome/$1 mv $ShellHome/old/$1_$DayOfWeek.zip $ShellHome/old/$1.zip.old find . -mtime +7 -type f | xargs nice -n 20 zip -qm $ShellHome/old/$1_$DayOfWeek.zip #find . -mtime +7 -type f

archiveOldAll.sh /erpHome/shell/archiveOld.sh work/dr/engine jrprint /erpHome/shell/archiveOld.sh work/de tmp /erpHome/shell/archiveOld2.sh public

Linux复习题(附答案)

一、填空 1、在Linux系统中,以(文件)的方式访问设备。 2、Linux内核引导时,从文件(/etc/fstab)中读取要加载的文件系统。 3、Linux文件系统中每个文件用(inode)来标识。 4、某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限(644),该文件属性是(目录)。 5、安装Linux系统对硬盘分区时,必须有两种分区类型:(文件系统分区)和(交换分区)。 6、编写的Shell程序运行前必须赋予该脚本文件(执行)权限。 7、FreeSoftware的含义是(自由软件) 8、(startx)命令可以用来启动X Window 9、用户编写了一个文本文件,想将该文件名称改为,可用命令(cat > ) 10、Linux文件权限一共10位长度,分成四段,第三段表示的内容是(文件所有者所在组的权限)。 11、某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为(764)。 12、将/home/stud1/wang目录做归档压缩,压缩后生成文件,并将此文件保存到/home目录下,实现此任务的tar命令是 (tar zcvf /home/stud1/wang)。 13、对于给定的文件file,统计其中所有包含字符串”WHU”的行数的一条命令是(grep WHU file | wc -l) 14、为卸载一个软件包,应使用(rpm –e)。 15、每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为(hdb),它上面的第三个主分区对应的文件名是(hdb3)。 16、vi编辑器有(3)种工作模式,分别是(命令模式、输入模式、末行模式)。 17、设定限制用户使用磁盘空间的命令是(quota )。 18、在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是(/etc )。 19、将前一个命令的标准输出作为后一个命令的标准输入,称之为(管道)。 20、为脚本程序指定执行权的命令及参数是(chmod a+x filename )。 21、进行字符串查找,使用(grep )命令。 22、在/dir1不存在的情况下,可以直接使用命令(mkdir –p /dir1/dir2)先后创建/dir1目录以及/dir1/dir2目录。 23、要使得名为fido的文件具有如下权限-r-xr-x—x的命令是:(chmod 551 fido3)。 24、可以使用命令(find /root –name *.cpp)在/root文件夹下查找后缀为.cpp的文件。 25、关闭linux系统(不重新启动)使用的命令(halt) 26、将光盘/dev/hdc卸载的命令是(umount /dev/hdc) 27、shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言。 28、将文件解压缩的命令是:(tar -zxvf ) 29、若当前系统安装的wu-ftpd软件包的版本为,想升级安装版本的wu-ftpd软件包,可以使用命令:(rpm –Uvh ) 30、安装Linux系统,硬盘至少要分二个分区,一个为交换分区,另一个必须挂载到(/ )目录。 31、是linux内核的(稳定)版本

相关文档