Linux shell for循环语句
Linux shell for循环语句
Shell中的for循环语句与一般编程语言里的for语句有些不同,在shell中,for 的作用是对一组参数都执行一个操作。
其语法形式为:
那么这些字符串就是文件名。
变量curvar是在循环内部用来指代当前所指列表中的对象的。
如果希望对List中的每个值都执行一次statements,可以使用这种格式。
在每一次循环中,将List中的当前值赋给curvar。
list可以是包含一组元素的变量或
在这种形式中,对传递给shell程序的每个位置参数执行statements一次。
在每次循环中,将位置参数的当前值赋给变量curvar。
这种格式也可以写成如下所示的
这里的$@是传递给shell程序的位置参数列表,引用的方式与用户初始调用命令时一致。
下面的shell脚本将使用for循环依次显示列表中5个变量的值,假定这些脚本位于当前用户的工作目录root/look中,其文件名为test5,内容如图15所示。
在该程序的for语句中,首先定义了一个名为var的变量,它的值依次是:one、two、three、four和five。
因为有5个变量值,所以do和done之间的命令会被循环执行5次。
在命令行中执行该程序,结果如图16所示:
图15 test5文件 图16 使用for 语句。
shell循环详解及实例
shell循环详解及实例⼀、条件选择、判断(if、case)1.1 if语句⽤法及实例当我们在脚本中遇到需要判断的时候,我们就可以⽤if语句来实现。
具体的语法如下:单分⽀if 判断条件;then 条件为真的分⽀代码 fi双分⽀if 判断条件; then条件为真的分⽀代码else条件为假的分⽀代码fi多分⽀if 判断条件1; then条件为真的分⽀代码elif 判断条件2; then条件为真的分⽀代码elif 判断条件3; then条件为真的分⽀代码else以上条件都为假的分⽀代码fi在多分⽀中,系统会逐条判断你写⼊的条件,第⼀次遇到“真”条件时,执⾏该分⽀,⽽后结束整个if语句。
注意:1、if和fi是成对出现的2、if语句可以嵌套。
Example:1)判断两个数字的⼤⼩1 #!/bin/bash2 #定义变量3 read -p "Please input the first num:" num14 read -p "Please input the second num:" num25 #判断数字是否符合标准6 if [[ $num1 =~ ^[0-9]+$ && $num2 =~ ^[0-9]+$ ]];then7 # 判断两个数字的⼤⼩并输出判断结果8 if [ $num1 -lt $num2 ];then9 echo "The num2 is biger than the num1"10 elif [ $num1 -eq $num2 ];then11 echo "Two numbers equal"12 else13 echo "The num1 is biger than the num2"14 fi15 else16 echo "Please enter the correct number"17 fi1819 #删除变量20 unset num1 num22)编写脚本/root/bin/createuser.sh,实现如下功能:使⽤⼀个⽤户名做为参数,如果指定参数的⽤户存在,就显⽰其存在,否则添加之;显⽰添加的⽤户的id号等信息1 #!/bin/bash2 #定义变量3 read -p "请输⼊⼀个⽤户名:" name4 #判断⽤户名是否存在5 if `id $name &> /dev/null`;then6 # 若存在,则输出ID等信息7 echo "⽤户存在,⽤户的ID信息为:`id $name`"8 else9 # 若不存在,则添加⽤户,设置密码为随机8位,下次登录时提⽰修改密码,同时显⽰ID等信息10 passwd=`cat /dev/urandom |tr -cd [:alpha:] |head -c8`11 `useradd $name &> /dev/null`12 `echo "$passwd" | passwd --stdin $name &> /dev/null`13 echo "⽤户名:$name 密码: $passwd" >> user.txt14 `chage -d 0 $name`15 echo "⽤户已添加,⽤户的ID信息为:`id $name` 密码为:$passwd"16 fi1718 #删除变量19 unset name passwd1.2 case⽤法及实例当涉及到多个条件匹配的时候,我们⽤if可能就很⿇烦了,这个时候,我们就可以⽤case来编写这个脚本。
Linux shell编程实验作业(含答案)
Linux shell实验作业参考1.编写一个Shell脚本,实现输入一个数字,输出该数字的阶乘。
思路:使用for循环,从1到输入的数字进行累乘,最终输出结果。
#!/bin/bashecho "请输入一个数字:"read numfact=1for ((i=1;i<=$num;i++))dofact=$(($fact*$i))doneecho "阶乘为:$fact"2. 编写一个Shell脚本,实现输入一个目录,输出该目录下所有文件名和文件大小。
#!/bin/bash# 获取目录路径read -p "请输入目录路径:" dir_path# 判断目录是否存在if [ ! -d "$dir_path" ]; thenecho "目录不存在!"exit 1fi# 遍历目录下所有文件for file in "$dir_path"/*do# 判断是否是文件if [ -f "$file" ]; then# 获取文件名和大小file_name=$(basename "$file")file_size=$(du -h "$file" | awk '{print $1}')echo "$file_name : $file_size"fidone使用方法:➢将以上代码保存为一个.sh文件,例如:`list_files.sh`➢给该文件添加执行权限:`chmod +x list_files.sh`➢在终端中运行该脚本:`./list_files.sh`,然后输入目录路径即可。
3. 编写一个Shell脚本,实现输入一个字符串,输出该字符串中所有大写字母的个数。
脚本的基本思路是遍历输入的字符串,对于每个字符,判断是否为大写字母,如果是则计数器加一。
shell中for几个常用写法
shell中for几个常用写法
在Shell脚本中,使用for循环是非常常见的。
下面是几种常用的for循环写法:
1. 遍历数字序列:
bash.
for i in {1..5}。
do.
echo "Number: $i"
done.
这个例子中,for循环会遍历从1到5的数字序列,并打印每个数字。
2. 遍历数组元素:
bash.
fruits=("apple" "banana" "orange")。
for fruit in "${fruits[@]}"
do.
echo "Fruit: $fruit"
done.
在这个例子中,for循环会遍历名为fruits的数组中的每个元素,并打印出每个元素的值。
3. 遍历目录中的文件:
bash.
for file in /path/to/directory/。
do.
echo "File: $file"
done.
这个例子中,for循环会遍历指定目录中的所有文件,并打印每个文件的路径。
无论是遍历数字序列、数组元素还是目录中的文件,for循环在Shell脚本中都是非常有用的工具,能够帮助我们轻松地处理各种不同类型的数据和任务。
shell for continue的用法
shell for continue的用法在Shell编程中,我们经常需要使用循环结构来重复执行一段代码。
其中,continue语句是一个非常有用的关键字,可以用于跳过当前循环中剩余的代码,直接进入下一轮循环的开始。
下面将介绍如何使用Shell的continue语句。
在Shell脚本中,continue语句通常与if语句和循环语句(如for循环和while循环)一起使用。
当某个条件成立时,我们可以使用continue语句跳过剩余的代码,返回循环的开头重新开始下一轮循环。
下面是一个示例,展示如何在for循环中使用continue语句:```shell#!/bin/bashfor (( i=1; i<=10; i++ ))doif (( i % 2 == 0 ))thencontinuefiecho "当前数字为:$i"done```在上面的示例中,我们使用了for循环来迭代变量i从1到10。
如果i能被2整除,也就是偶数,那么执行continue语句,直接跳过下面的echo语句,返回循环的开头开始下一轮循环。
如果i不能被2整除,也就是奇数,那么输出当前数字i。
运行以上示例脚本,将输出如下内容:```当前数字为:1当前数字为:3当前数字为:5当前数字为:7当前数字为:9```可以看到,当i为偶数时,continue语句起到了跳过echo语句的作用,只输出了奇数。
需要注意的是,continue语句只能用于循环结构中,例如for循环和while循环,并且只会跳过当前循环中的剩余代码,直接开始下一轮循环。
如果在没有嵌套循环的情况下使用continue语句,将会导致语法错误。
综上所述,Shell编程中的continue语句用于跳过当前循环中剩余的代码,直接进入下一轮循环的开始。
通过合理运用continue语句,我们可以在循环结构中实现更复杂的逻辑控制。
linux sh循环参数
在Linux的shell脚本中,你可以使用循环来重复执行一段代码。
这可以通过几种不同的方式来实现,包括for循环、while循环和until循环。
下面我将解释如何在shell脚本中使用这些循环,以及如何处理循环参数。
1. for 循环:这是一个基本的for循环示例,它使用一个数字序列作为参数:bash`#!/bin/shfor i in {1..5}; doecho "Iteration $i"done`你也可以使用一个数组作为参数:bash`#!/bin/sharray=("apple" "banana" "cherry")for fruit in "${array[@]}"; doecho "I like $fruit"done`2. while 循环:while循环会一直执行,直到给定的条件不再为真。
以下是一个示例,其中循环会打印数字1到5:bash`#!/bin/shi=1while [ $i -le 5 ]doecho "Iteration $i"i=$((i+1))done`3. until 循环:until循环会一直执行,直到给定的条件为真。
以下是其与while循环的相似示例:bash`#!/bin/shi=1until [ $i -gt 5 ]doecho "Iteration $i"i=$((i+1))done`4. 处理命令行参数:如果你想在脚本中使用命令行参数,你可以简单地通过在脚本中使用1、2、$3等来引用它们。
例如:bash`#!/bin/shecho "First argument: $1"echo "Second argument: $2"````如果你运行这个脚本并传入两个参数,它会分别打印出这两个参数。
linuxshell常用循环与判断语句(for,while,until,if)使用方法
linuxshell常⽤循环与判断语句(for,while,until,if)使⽤⽅法shell的循环主要有3种,for,while,untilshell的分⽀判断主要有2种,if,case⼀,for循环#!/bin/bashfor file in $(ls /tmp/test/mytest |grep sh) //for in格式是shell for的基本格式,根js的for in类似do //循环开始你就把它当成{echo $filedone //循环结束你就把它当成}for ((i=0;i<10;i++)) //注意是双⼩括号,由于受其他语⾔的影响,很容易搞错doecho -n $idoneecho \ //输出换⾏for i in 0 1 2 3 4 5 6 7 8 9doecho -n $idoneecho \for i in "0 1 2 3 4 5 6 7 8 9" //这个根上⾯是有区别的,这个循环只循环了⼀次,双引号⾥⾯只是⼀个变量doecho -n $idoneexit 0⼆,while循环#!/bin/bashi=0while ((i<10))doecho $i((i += 1))donei=0while [ $i -lt 10 ] //注意括号内侧⼆边的空格doecho $ilet "i+=1" //加1doneexit 0三,until循环#!/bin/bashEND_CONDITION=enduntil [ "$var1" = "$END_CONDITION" ] //读取的变量根设定的变量相等时退出循环,不然永远循环doecho "Input variable #1 "echo "($END_CONDITION to exit)"read var1echo "variable #1 = $var1"echodoneexit 0四,if语句#!/bin/bashecho "Input a number #1 "read numecho "variable #1 = $num"if [ $num -lt 60 ] //注意lt前⾯的-,很容易忘的thenecho "you are not pass"elif [ $num -lt 70 ] && [ $num -ge 60 ] //多个条件的判断thenecho "pass"elif [[ $num -lt 85 && $num -ge 70 ]] //如果放在⼀起,要注意是双⽅括号,不要写成[ $num -lt 85 && $num -ge 70 ] thenecho "good"elif (( $num <= 100 )) && (( $num >= 85 )) //对于有语⾔基础的⼈来说,这种写法让⼈觉得很舒服,不要忘了是双⼩括号thenecho "very good"elseecho "num is wrong"fi //if要有结束标签的,根XML很像,不闭合,就报错exit 0五,case语句#!/bin/shcase $1 instart)echo "start ok";; //注意⼀点,要注意是双分号stop)echo "stop ok";;restart)echo "restart ok";;*)echo "no param";;esac //注意闭合标签exit 0[root@krlcgcms01 forif]# sh c1.sh stopstop ok这篇⽂章就先介绍到这,下⾯将为⼤家分享更好的内容。
linuxshellfro循环自增在linuxshell中使用for遍历产生的递增数字序
linuxshellfro循环自增在linuxshell中使用for遍历
产生的递增数字序
在Linux shell中,可以使用`for`循环来遍历产生的递增数字序列。
可以使用以下方式来实现:
```shell
#!/bin/bash
for i in $(seq 1 10); do
echo $i
done
```
上面的代码将输出从1到10的数字序列。
使用`seq`命令可以生成指定范围的数字序列。
`seq`命令的语法为
`seq [选项] 开始值步长结束值`。
在上面的例子中,使用`seq 1 10`
生成了从1到10的数字序列。
在`for`循环中,变量`i`会依次取值数字序列中的每个元素。
在循环
体内,可以对`$i`进行相应的处理。
注意,`seq`命令在一些系统中可能不可用,你可以尝试使用其他方
法来生成数字序列。
例如,你可以使用`{开始值..结束值}`的语法,如下
所示:
```shell
#!/bin/bash
for i in {1..10}; do
echo $i
done
```
这样也可以生成从1到10的数字序列。
shell中的for、while循环及if语句
shell中的for、while循环及if语句shell与其他语⾔⼀样也⽀持for、while循环for循环的⼀般格式如下:1 #!/bin/sh23for变量in列表4do5 command 16 command 27 command 18 .........9 command n10done列表是⼀组值(数字、字符串等)组成的序列,每个值通过空格分隔。
每循环⼀次,就将列表中的下⼀个值赋给变量。
列表也可以是⼀个⽂件:in 列表是可选的,如果不⽤它,for 循环使⽤命令⾏的位置参数。
1 #!/bin/sh23for line in12345674do5echo"line is $line"6done结果:[root@localhost 1st]# sh test.shline is 1line is 2line is 3line is 4line is 5line is 6line is 7下⾯⽤for循环读⼀个⽂件:查看⽂件内容1 [root@localhost 1st]# cat test.txt2 hello3 wolrd4 hello5 shell6 [root@localhost 1st]#code:1 #!/bin/sh23 FILE=./test.txt45for line in $(<$FILE)6do7echo"line is: $line"8doneResults:1 [root@localhost 1st]# sh xx.sh2 line is: hello3 line is: wolrd4 line is: hello5 line is: shell6 [root@localhost 1st]#while循环的⼀般格式如下:1while command2do34 statement56done3 i=04sum=05while [ $i -le 100 ]6do7sum=$(($sum + $i))8 i=$(($i + 1))9done10echo"sum is $sum"rusults:1 [root@localhost 1st]# sh xx.sh2sum is 50503 [root@localhost 1st]#if语句的⼀般格式如下:1if ....; then2 ....3elif ....; then4 ....5else6 ....7fiif 条件语句:⽂件表达式:1 [ -f "somefile" ] : 判断是否是⼀个⽂件2 [ -x "/bin/ls" ] : 判断/bin/ls是否存在并有可执⾏权限3 [ -n "$var" ] : 判断$var变量是否有值4 [ "$a" = "$b" ] : 判断$a和$b是否相等5 -r file ⽤户可读为真6 -w file ⽤户可写为真7 -x file ⽤户可执⾏为真8 -f file ⽂件为正规⽂件为真9 -d file ⽂件为⽬录为真10 -c file ⽂件为字符特殊⽂件为真11 -b file ⽂件为块特殊⽂件为真12 -s file ⽂件⼤⼩⾮0时为真13 -t file 当⽂件描述符(默认为1)指定的设备为终端时为真字符串表达式:[string string_operator string]这⾥string_operator可为如下⼏种:1 = 两个字符串相等。
shell编程_for_in_循环
for in格式for无$变量in字符串do$变量done一简单的字符串枚举遍历法,利用for in格式对字符串按空格切份的功能SERVICES="8022251108000232021 3306"for x in$SERVICESdoiptables-A INPUT-p tcp--dport$x-m state--state NEW-j ACCEPTdonefor variable in values--------字符串数组依次赋值#!/bin/shfor i in a b c字符串列表A B C字符串用空格分隔,没有括号,没有逗号,然后循环将其依次赋给变量i变量没有$doecho"i is$i"done[macg@machome~]$sh test.shi is ai is bi is cfor in里,变量和*不等价#!/bin/bashfor i in*.h;docat${i}.hdone[macg@vm test]$./tip.shcat:*.h.h:No such file or directory$i代表的是整个路径,而不是*.h里的.h前面的部分改正#!/bin/bashfor i in*.hdocat$idone[macg@vm test]$echo hahaha>>1.h[macg@vm test]$echo ha>>2.h[macg@vm test]$./tip.shhahahaha例2:for i in/etc/profile.d/*.sh do$idone$i代表的是/etc/profile.d/color.sh, /etc/profile.d/alias.sh, /etc/profile.d/default.shfor in对(命令行,函数)参数遍历test(){local ifor i in$*;doecho"i is$i"done}$*是字符串:以"参数1参数2..."形式保存所有参数$i是变量i的应用表示[macg@machome~]$sh test.sh p1p2p3p4i is p1i is p2i is p3i is p4for in语句与通配符*合用,批量处理文件批量改文件名[root@vm testtip]#lsaaa.txt ccc.txt eee.txt ggg.txt hhh.txt jjj.txt lll.txt nnn.txtbbb.txt ddd.txt fff.txt go.sh iii.txt kkk.txt mmm.txt ooo.txt[root@vm testtip]#cat go.shfor i in*.txt*.txt相当于一个字符串数组,依次循环赋值给idomv"$i""$i.bak"done[root@vm testtip]#sh go.sh[root@vm testtip]#lsaaa.txt.bak ccc.txt.bak eee.txt.bak ggg.txt.bak hhh.txt.bak jjj.txt.bak lll.txt.bak nnn.txt.bakbbb.txt.bak ddd.txt.bak fff.txt.bak go.sh iii.txt .bak kkk.txt.bak mmm.txt.bak ooo.txt.bakfor in语句与``和$()合用,利用``或$()的将多行合为一行的缺陷,实际是合为一个字符串数组for i in$(ls*.txt)doecho$idone[macg@machome~]$sh test111-tmp.txt111.txt22.txt33.txt或者说,利用for in克服``和$()的多行合为一行的缺陷利用for in自动对字符串按空格遍历的特性,对多个目录遍历LIST="rootfs usr data data2"for d in$LIST;domount/backup/$drsync-ax--exclude fstab--delete/$d//backup/$d/ umount/backup/$ddone。
Linux13:shell脚本基本命令
Linux13:shell脚本基本命令shell脚本基本命令输出命令echo输出命令echo,基本模式就是echo [选项] [输出内容]输出内容如果包含空格,则必须将内容⽤双引号括起来。
选项-e可以使输出语句⽀持反斜线转义。
加⼊退格后就不会显⽰退格符左边的⼀个字符。
ascii码表中有对应的⼋进制和⼗六进制表⽰法,所以可以表⽰对应的字符。
显⽰环境变量的值:echo ${PATH}或echo $PATH,如果⼀个变量没有被设定,那么就什么都不返回。
颜⾊输出如将abcd⽤红⾊打印:echo -e "\e[1;31m abcd \e[0m"其中\e[1的意思是开启颜⾊输出,⽽\e[0m是结束颜⾊输出,31m代表红⾊,abcd是输出内容,其他颜⾊如下:第⼀个脚本与脚本执⾏⽅式新建⼀个脚本hello.sh:#!/bin/bash#the first programecho "hello world"exit 0其中第⼀⾏是声明,不是注释,不能省略,这是在指定使⽤哪个shell,如果没有这⾏有的程序可能⽆法执⾏。
第⼆⾏#开头的是注释,第四⾏是命令。
最后⼀⾏在设置回传值,在执⾏完该脚本后,执⾏echo $?就能查看这个值,可以通过这个⾃定义错误信息。
在脚本中有需要时要重新定义⼀下PATH环境变量,以便直接使⽤⼀些外部命令⽽不是写绝对路径:PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/root/bin export PATH执⾏shell脚本要先赋予其可rx权限:chomd 755 hello.sh然后再执⾏./hello.sh这⾥也可以⽤绝对路径执⾏。
