linux的shell编程九九乘法表,Linux中编写shell脚本,输出如下序列:1,3,2,4,3,5,4,6,···100 。[附图]
linux的shell编程九九乘法表,Linux中编写shell脚本,输出如下序列:1,3,2,4,3,5,4,6,···100 。[附图]详细介绍
本文目录一览: 用shell程序打印九九乘法表?
#!/bin/bash
for (( i=1;i<=9;i++ ))
do
for (( j=1;j<=9;j++ ))
do
[ $j -le $i ] && echo -n "${i}*${j}=$((i*j)) " #判断j是否小于i,当j大于i时不输出,输出不换行,末尾加一个制表符
done
echo "" #输出一个换行符
done
用shell编程写一个for循环的九九乘法表 只能用一个for循环
#!/bin/bashecho "This is the multiple table."for((i=1;i<=9;++i))do for((j=1;j<=i;j++)) do echo -ne "$i*$j=$((i*j))\t" done echodone
Red Hat Linux Shell编程,在屏幕上输出小九九乘法表
#!/bin/sh
i=0
j=0
while [ $i < 10 ]
do
while [ $j < $i ]
do
echo $j
echo '+"
echo $i
echo '='
echo `expr $j \* $i`#小心符号间的空格,下同
j=`expr $j + 1
done
i=`expr $i + 1`
echo "\"
done
shell下的九九乘法表 要求用函数
print99(){
ocal arry2=$1
echo $arry2
for i in $arry2
do
all=""
for j in $arry2
do
if [ $j -gt $i ]
then
break
fi
let "result=$i*$j"
all+=" $i*$j=$result"
done
echo $all
done
}
arry="1 2 3 4 5 6 7 8 9"
print99 $arry 111S
s是不是要这种?
Shell脚本编程实战
做 Java 的肯定都接触过 Linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本,让我们的项目变得可以访问 就像 ./sh service.sh start 然后启动我们写好的 sh 的shell脚本。接下来我们就来学习一下关于 Shell 脚本是如何写出来的。
Shell 脚本是什么?Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,也就是说,我们用户每输入一条命令,Shell 就会相对应的执行一条命令。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。
在我们的 Shell 脚本中,会有各种各样的内容,赋值,计算,循环等一系列的操作,接下来我们就来看看这个 Shell 脚本怎么写吧
1.查看自己当前系统默认的 Shell
echo $SHELL
输出:/bin/bash
2.查看系统支持的Shell
cat /etc/shells
输出:
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
也就是说,我们的云服务器是支持我们在这里给他安排 Shell 脚本的
我们这时候先来安排一下 sh 的文件,创建一个文件夹,然后在其中创建一个 sh 的文件。
mkdir /usr/local/shelltest
touch test.sh
创建完成我们编辑一下内容
vim test.sh
然后我们出来运行一下我们的 Shell 的第一个脚本
bash test.sh
出来的结果是 Hello World Shell
一个及其简单的脚本出现了,接下我们就分析一波我们写了点啥?
#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
我们在之前也使用了 echo $SHELL 来查看了自己系统默认的是哪一种 sh 解析器,之前看到的是/bin/bash,所以我们在写 Shell 脚本的时候,我们在开头默认的约定中,我们写了这个是用 /bin/bash 来进行解释的,
那么我们如何像之前调用我们的当前目录中的 Shell 脚本一样去调用他呢?就像这个样子的 ./sh service.sh start
1.授权,
我们先不授权试一下看看能通过 ./test.sh 进行调用么
bash: ./test.sh: Permission denied 会提示这个,也就是没有授权定义,
授权命令:chmod +x test.sh
2.执行 ./test.sh
然后调用就能正常输出了,就是说,在当前的目录下执行这个脚本命令。
变量命名实际上很简单,我们先来试一下
name=zhiyikeji
这时候我们怎么使用变量呢?实际上只要在前面加上一个符号就可以 $
echo $name
上面的两种写法都是可以的,外面的大括号加和不加区别不大,可以省略,直接就 $name 就可以使用你定义的变量
使用括号的意义一般在于区别某些变量,比如你写了一串的内容,可能写的是 echo $nameismyfriend ,如果连在一起,是不是有点尴尬,这时候就可以使用括号区别一下, echo ${name}ismyfriend 不使用括号的时候,他就去找nameismyfriend这个变量了,就无法出来我们要的效果。
unset name
这时候我们就把我们刚才定义的 name=zhiyikeji 这个变量给去掉了,我们可以调用一下我们的变量看是什么?
echo $name
这是不是就证明我们自己定义的变量已经删除了
那么我们需要一个关键字,大家肯定能想到是什么关键字 readonly
我们先给name赋值,然后使用 readonly 设置只读,然后再改变一下试试,
竟然是真的,如果不设置只读,是不是会重新可以进行赋值,我们测试个年龄,
所以我们就可以肯定,readonly就是设置只读的关键词,记住了么?
那么设置只读的变量可以删除么?毕竟总有杠精的面试官会提问这个棘手的问题,但是,阿粉试过的所有方式好像都是不行的,阿粉就直接重启了自己的服务器,这样临时的变量就不存在了!
说真的,Shell脚本的流程控制数一般才是yyds,为什么这么说,因为你在写大部分的脚本的时候,流程控制的地方永远是最多的,判断,选择,等等一系列的函数,当时熟练使用的时候,就发现这东西确实很有意思。
我们先说最简单的 if else 这也是我们最经常使用的判断,在写 Shell 脚本的时候,就不像我们的 Java 中直接写
Xshell 中的语法就不是这个样子的, Xshell 语法:
末尾的 fi 就是 if 倒过来拼写,我们可以写一个 if 的脚本试一下这个流程能否理解。
这里申明一下,
我们在上面这段脚本中写就是内容就是,我们给脚本传入一个值,然后比对这个值和2的大小关系,然后输出我们指定的内容。
运行后就能看到
$1 表示我们给 Shell 脚本输入的第一个参数, $0 就是你写的shell脚本本身的名字,$2 是我们给 Shell 脚本传的第二个参数
大家在部署某些项目的时候,是不是启动命令就很简洁,就是 sh service.sh start 类似这种的,那我们来看看一般这种是怎么写的,这就用到了另外一块的内容,和 if 类似,在 Java 中也有,那就是 Case .
我们先来看看 Case 的语法,
case ... esac 实际上就和 Java 中的 Case 是非常相似的,case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令. esac 是一个结束的标志。
光说不练,假把式,我们来搞一下试试写一个脚本来搞一下。就用我们刚才说的 sh servic.sh start 来进行测试。
我们来看看运行结果
那么这段 Shell 脚本是什么意思呢?其实很简单,匹配我们传入的第一个字符,和 start 还有 stop 进行比较,如果匹配上之后,输出命令,最后退出即可。
是不是感觉没有那么复杂了呢?
说到流程控制,那么肯定不能不说 for , 毕竟 for 循环在 Java 中那可是重头戏。
我们先看他的格式
那么我们有没有说像是 Java 中那种 for 循环一样的方式呢?比如说这个 for ((i=1; i<=j; i++))
实际上也是支持这种的,我们来写一个试试。
执行一下看看
既然有 for 那是不是就有 while 呢?是的,没错,确实是有 while ,也是循环的意思,但是写法有略微不一样的地方
我们来举个尝试打印九九乘法表来看一下
是不是也挺简单的?
其实 Shell 脚本的编写一般都是在实际应用中提升,单纯的写测试脚本,也是可以让自己对知识的掌握比较充分,而我们一般都是写一些比较简单的脚本,复杂的不是还有运维么?
Linux shell for 循环和双层循环
Shell 脚本一直以来不是很入门,很多时候就是用到再查,发现自己有几个重复用比较高的点,还是记录一下,至少查的时候能少费点功夫~~
(1)列表for循环
Shell支持使用略写的计数方式,如{1..10},表示1到10的整数数字; Shell还支持安规定的步数进行跳跃的方式实现列表for循环,例如计算1~100之内所有奇数的和。
i 按照2的增量增长,一直到增长到100。即实现100内奇数加和。还可以使用seq命令实现按2递增来计算1..100内的所有奇数之和。 for i in $(seq 1 2 100) ,seq 表示起始值为1,增量为2,结束条件值为100。
for循环除了数字列表,还可以生成字符串列表,如列出当前文件夹下的所有文件:
还可以传递命令行参数
$#表示传递的参数的个数;$@表示参数的列表。
(2) 类C风格的for循环 也称之为计次循环。 切记使用的是双括号。
上面的计算100以内奇数的和可以使用类C的for循环实现
通过for循环实现九九乘法表
求高手帮忙下Linux系统的Shell编程,我们的一个实验课课题,详见问题补充,谢谢
#!/bin/bash
dir_source="/home/hnsd/workdata/"
yyyymmdd=`date +%Y%m%d`
data_time=`date +%p`
if [ "${data_time}" = "AM" ]; then
workdata=workdata1
dir_back="/home/hnsd/disk1backup/"
else
workdata=workdata2
dir_back="/dev/disk2backup/"
fi
tar zcvf ${dir_back}${yyyymmdd}_${workdata}.tar.gz ${dir_source}*
crontab 写法为
* 12 * * * 脚本绝对路径
30 17 * * * 脚本绝对路径
Linux中编写shell脚本,输出如下序列:1,3,2,4,3,5,4,6,···100 。[附图]
上面写的真的是shell脚本,不是C。可以直接执行的,GCC的编译针对于C的。这个真的弄混了。还有GCC的用法写的不对啊,详情可以参见百度上的教程。
孩子脚本语言是不需要编译的,sh 12.c就可以了,还有shell脚本一般以sh为扩展名,不要用c,也可以chmod +x 12.c 加可执行权限,./12.c来执行
你这是shell脚本,又不是c程序。shell脚本设置下就可以直接跑,不用编译。
先把你的文件名改成12.sh(当然名字不重要,只是用来标识是shell脚本的)
chmod 777 12.sh
. ./12.sh 或者是source ./12.sh
就可以执行了。
你只是想输出1~100这100个数字??
直接用循环就行了啊
代码
#!/bin/bash
for (( i=1; i<=100 ; i=i+1 ))
do
echo "$i"
done
————————————————————
看错题目了,当我没答
脚本至少有如下错误:
{j}改为${j}或$j,是要取值的啊
expr语句外面是反引号(键盘上ESC下面那个键)而不是单引号,表示执行命令而不是单纯一个字符串,expr后面的运算符左右两侧要有空格。
if跟[之间是要有空格的,if判断表达式比较符两侧也要有空格,数字跟 [ ]之间要有空格。
我修正了,自己运行成功生成你要的数列了。你自己对比下吧:
#!/bin/bash#script name prg8.shcleari=1for ((j=1;j<=98;j++))do echo -n "$j,`expr $j + 2`," if [ $i -eq 10 ] then echo "" i=1 else i=$((i+1)) fi doneecho "" 注释里已经说了,script name prg8.sh,脚本名叫prg8.sh,当然,叫什么名字是你的自由。
学生信的那些事儿之七 - Linux基础之Shell脚本编程
沿着前面的轨迹,接下来是Linux中shell脚本的学习。这对于生信工程师后续处理大量 (海量更合适些) 数据是非常非常重要的,但是同样的,作为一个有点古板的人,对于"脚本"是什么意思我都死磕了好久。主要觉得有些抽象,尤其是跟生信的同事讨论项目分析部分的问题时,他们经常会说道这个词,在他们意识里这是个不言自明的术语,殊不知对外行人而言 (比如我),那简直就是无情的"知识的诅咒"。经常是我假装听懂了,然后继续讨论下面的问题,形成一个模糊的印象。
百度上的解释是:脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。不知道你能不能看懂,反正我开始的时候真是一知半解。
鸟哥私房菜的解释是:shell script是利用 shell 的功能所写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理的目的。不明觉厉,好像更看不懂了···
Jude 的简单粗暴大白话解释是:脚本就是Linux中很多命令按照一定规则的组合,以实现某个特定的功能。Linux中有很多简单的命令,往往只是进行了简单的对话,比如 cd 就是进入到某个目录,简单直接。但是如果我想进入某个目录A,然后在目录A中创建目录B,再在目录B中创建文本C呢?当然可以一步一步操作,如果想要一步到位呢,那就可以用脚本,把三个命令写在一起,一起执行。好像有点啰嗦···
或者从英语的角度去理解,脚本的对应英文是Script,而这个单词的中文释义中还有剧本的意思。剧本就好理解了啊,剧本就是导演(生信工程师)基于某个主旨(要实现的目标)按照一定的手法(规则)所写的一个故事。不管是哪个演员,都得按照剧本演。所以,学好英语对于生信也是有帮助的~
按照脚本的复杂程度可以分为:
这个无需多说,其实就是若干个简单命令的顺序排列,执行脚本后会按照命令的前后关系从前往后一一执行。
相对于简单的基本脚本,结构化的命令脚本可以施加逻辑流程控制,从而改变程序(命令)执行的顺序。基本脚本中的命令就是从上往下执行,但是结构化的命令脚本可以根据逻辑判断重复或者跳过某些命令。
常用的结构化命令(语句)有:
后面还有什么嵌套循环啊啥的,不过我觉得上面的7中命令学到家了,应该可以应付大部分在生信分析里面的应用了。
记得高中的时候,物理老师(也是班主任)在给我们讲解习题时有个有意思的套路:不管什么难题现在下面写个"答:",以示自己解决问题的决心,也是一种正向的心理暗示。脚本编写也是有套路的,不过总的来说还是比较简单。
对于简单的脚本(超级简单的那种),直接几个命令连在一起即可,中间用";"隔开。
对于更长更复杂的脚本,一般需要创建一个文本,并在里面编辑。这就涉及到了文本编辑器,比较常用和简单的一般有nano和vim,实在很简单,规则也容易理解,教程随手可得,不多说。
比如用vim创建了一个脚本之后,具体的语法(套路):
ok,脚本写完了,怎么让脚本开始工作呢?这有涉及到之前讲过的环境变量和相对路径、绝对路径了。方法有三:
就这么多吧,应该有点感觉到了,剩下的就是狂练狂练了~