Linux实验4shell编程
Posted lth1005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux实验4shell编程相关的知识,希望对你有一定的参考价值。
shell编程(2)
1. shell变量基本用法及常用符号使用
(1)将主题示符改为用户的主目录名
?
(2)将字符串 DOS file c:>$student*赋值给变量 x,并显示出来
?
(3)在 shell 命令终端输入 likes=(cosmos galaxy moon); likes[6]=mars,然后使用 echo 分别显示以下表达式 的值,并结合结果,写出表达式的作用。
?
- ${likes[*]}的作用:显示所有非空元素
- ${like[@]}的作用:同上,元素值中嵌入的字符作为字段分隔符出现
- ${#like[*]}的作用:显示已设置元素值的个数
${#like[@]}的作用:同上
(4)在 shell命令终端输入name=Phoenix,然后使用echo显示表达式①,观察结果;然后输入命令unset name, 再输入表达式①观察结果。结合两次结果,写出表达式的作用。
用参数置换为变量赋值,如果变量的值为空,输出的结果为给定的字符,否则讲字符串赋给变量name
(5)在 shell命令终端输入name=‘/usr/share/doc/apg/php.tar.gz‘,然后使用echo分别显示表达式①和②的值, 观察结果。
?
- ${name%%.*}的作用:去掉第一格式中匹配最多部分的值
${name%.*}的作用:如果%%前后的内容末尾匹配,则去掉末尾匹配的值
(6)在 shell 命令终端输入 name=/usr/bin/X11,然后使用 echo 分别显示表达式①和②的值,观察结果。 修改 name 的值,让 name=‘/etc/apt/sources.list.d‘,再次使用 echo 分别显示表达式①和②的值,观察结果。 结合结果,写出表达式的作用。
?
- ${name#*/}:去掉与name值开头匹配部分的值
- ${name##*/}:去掉上面格式中匹配的部分
(7)已知某同学提交的博客文章页面地址 address 如下: address=‘http://www.cnblogs.com/xyz/p/8569001.html‘ 通过字符串匹配,如何得到其博客主页地址: homepage
#!/bin/bash
address="‘http://www.cnblogs.com/xyz/p/8569001.html‘"
homepage="homepage=""${address%/p*}""‘"
echo $homepage
2. shell脚本分析
(1)
#!/bin/bash
# p145 4.8
count=$#
cmd=echo
while [ $count -gt 0 ]
do
cmd="$cmd $$count"
count=`expr $count - 1`
done
eval $cmd
- 执行. ex1.sh时,没有带参数,不符合while语句,所以没有输出
- 执行. ex1.sh best wishes时,有两个参数,满足条件,最后运行cmd命令
- 执行. ex1.sh god bless u时,原理同上
- 作用是倒叙输出
- 有几个参数就循环几次
- 执行. ex1.sh god bless u时第八行cmd执行后为echo $3
(2)
#!/bin/bash
# p145 4.10
IS_USER_FOUND=0
date +%F
if who | grep "^$1"; then
IS_USER_FOUND=1;
write $1 <<Limitstring
hello
Limitstring
fi
if [ $IS_USER_FOUND -eq 0 ]; then
echo "user $1 is not found."
fi
- 第6行,用于判断用户名是否正确
- 第8-10行,讲第一个参数重定向,向其发送hello
(3)
#!/bin/bash
suffix=BACKUP--`date +%Y%m%d-%H%M`
for script in *.sh; do
newname="$script.$suffix"
echo "Copying $script to $newname..."
cp $script $newname
done
- 将当前文件夹中的sh格式文件copy
(4)
!/bin/bash
# realize function same as Command cat -n
function NL() {
while read x
do
(( ++line ))
echo "$line $x"
done
}
line=0
if [ $# -eq 0 ]; then
NL
else
while [ "$1" ] && [ -f "$1" ]
do
NL < $1
shift
done
fi
- 4-10行中的函数的作用是将用户输入的值保存在变量x中,然后输出行号和x的值
- 14行,执行
- 17-21,接受用户输入,将参数左移一位
3. shell脚本编写
(1)
#!/bin/bash
dir=$1
shift
for script in [email protected]
do
cp $1 $dir
done
(2)
#!/bin/bash
cd $1
shift
while [ $1 ]
do
file=$1
cat $1
shift
done
(3)
#!/bin/bash
for script in *.c
do
mv $script $x
done
cd $x
ls -Sl
(4)
#!/bin/bash
read str
echo $str | cut -c $1-$2
(5)
#!/bin/bash
echo "Please input the num(1-100) "
read num
radent=$((RANDOM%))
while [[ "$num" != $radent ]]
do
if [ "$num" -lt $radent ]
then
echo "small"
read num
elif [ "$num" -gt $radent ]
then
echo "high"
read num
fi
done
echo "Yes! "
以上是关于Linux实验4shell编程的主要内容,如果未能解决你的问题,请参考以下文章
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础
linux打开终端如何启动scala,如何在终端下运行Scala代码片段?
20179223《Linux内核原理与分析》第十一周学习笔记
Note4shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,peci,软连接