shell编程

shell编程报错:“syntax error near unexpected token `”

北城余情 提交于 2020-03-07 04:59:03
今天写了两个shell脚本,授予权限之后执行出现问题“syntax error near unexpected token” 话不多说直接上解决方案 1)vi -b setup.sh 2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g 注意一点 ,这个“^M”是输入ctrl+v和ctrl+M组成的 那么为什么会出现这种原因,我研究了一下 因为我用windows记事本打开过这个脚本,由于linux和windows里的换行符不一样导致了linux每一行后都有个^M,并且用vim看不出来脚本的变化 下面附上更详细的大神博客链接 shell编程报错:“syntax error near unexpected token `” 来源: CSDN 作者: 在下攻城巨炮狮 链接: https://blog.csdn.net/weixin_41911883/article/details/104704127

shell编程之99乘法表

核能气质少年 提交于 2020-03-06 18:38:54
#99乘法表#!/bin/bash #第一种写法 for i in `seq 9` #`seq 9` 使用反撇号括起来的(不是单引号),表示命令替换 do for j in `seq $i` #seq可以使用变量 do echo -ne "$j*$i=$[$j*$i]\t" # -n取消换行 -e 处理特殊字符,\t相当于tab键, done echo #作用:内层循环结束之后,进行换行 done #第二种写法 for a in {1..9} #{}将1~9列出,同上`seq 9` do for ((b=1;b<=$a;b++)) do echo -ne "$b*$a=$[$b*$a]\t" #[]也可以替换为(()) done echo done 第三种写法 for c in {1..9} do for d in {1..9} do if [ $d -le $c ];then #同上,当内层循环$d小于等于外层循环$c时 echo -ne "$d*$c=$[$d*$c]\t" fi done echo done 上述脚本执行结果如下:  来源: https://www.cnblogs.com/jrjs/p/11617227.html

shell简单编程

五迷三道 提交于 2020-03-06 18:37:07
赋值与循环分支 $x 用于取变量x的值 $1 表示第一个参数,$#表示参数个数,shift移动一个参数。 let i=$x+$y,为整数操作赋值,所以必须有两个以上操作数.当只有一个操作数时使用,i=$x. #!/bin/bash echo "please input num:" read num echo "the num is $num" #声明变量,不能有空格 sum=0 i=0 # while循环,需要留出空格 while [ $num -gt $i ] do let mo=$i%2 # 开始条件需要留出空格 # then,else 要单独留出空行 if [ $mo -eq 0 ] then 3 赋值不能有空格 let sum=$sum+$i else touch $i tar cvf - `find . -mtime -1 -type f -print` > x.tar # 结束条件 fi let i=$i+1 # 结束循环 done echo "the sum is $sum" for循环以及数组 #!bin/bash echo "my student number is :1133710513, my name is zhiwei huang" city[1]=Beijing city[2]=Shanghai city[3]=Wuxi city[4]=Wenzhou

Shell编程基础

风流意气都作罢 提交于 2020-03-04 07:19:09
写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单、灵活、高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作变得容易、简单、高效 shell脚本可移植性好,在unix/linux系统中可灵活移植,几乎不用任何设置就能正常运行 shell脚本可轻松方便读取和修改源代码,不需要编译 掌握shell可以帮你解决一些故障问题,比如脚本引起的故障问题 掌握shell是一个中级以上系统工程师必需要会的 掌握shell是你系统管理进阶的必经之路 掌握shell是你面试更高级职位的一块敲门砖 那什么时候不使用Shell 脚本? 资源密集型的任务,尤其在需要考虑效率时(比如排序,hash 等) 需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN 来处理) 有跨平台移植需求(一般使用C 或Java) 复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型,等等) 对于影响系统全局性的关键任务应用。 对于安全有很高要求的任务,比如你需要一个健壮的系统来防止入侵,破解,恶意破坏等等. 项目由连串的依赖的各个部分组成。 需要大规模的文件操作 需要多维数组的支持 需要数据结构的支持,比如链表或数等数据结构 需要产生或操作图形化界面 GUI 需要直接操作系统硬件 需要 I/O

shell编程-运算符

那年仲夏 提交于 2020-03-03 19:41:52
运算符 + - * / % += 相当于 a+=b a=a+b -= *= /= %= 执行运算: 1. $( (a * b) ) 可以有空格 里面的运算符不需要转义 如果和字符串相加,字符串的变量默认为0 expr a + b 数字两边必须有空格 里面的运算符需要转义 转义符/ 不支持数字和字符串相加 [ ] 使用方括号 echo $ [a*b ] echo $ [a+b] 可以直接调用变量的值,无需添加$符号 可以有空格 里面的运算符不需要转义 不支持浮点数运算 浮点数运算: bc //linux自带的计算器 //支持变量运算 scale=4 //指定小数点后面保留4位 如何应用到脚本里: 借用管道符号 | # echo "scale=5; 10/ 3" | bc 运算多行: d=`bc <<EOF 1+2 3+4 5*6 EOF ` 命令`跟$(命令 )效果是一样的 ` 退出状态: # echo $? 查看上一个命令执行的退出状态 返回值为0时,代表命令执行成功 非0的正整数时,执行不成功 exit=$(echo $?) 0 命令成功结束 1 一般性未知错误 2 不适合shell的命令 126 命令不可执行 127 命令未找到 128 无效的退出参数 130 通过ctrl+c 终止的命令 255 正常范围之外的退出状态码 状态码是可以自己定义的:0-255 a=10 exit

shell编程基础-字符截取(printf)

╄→尐↘猪︶ㄣ 提交于 2020-03-03 15:47:38
shell编程基础-字符截取 1、printf字符提取命令 printf '输出类型输出格式' 输出内容(不是文件名),并不是会自动加入换行符,如果需要则需要自加; 输出类型: %ns:输出字符串。n 是数字,指代输出几个字符; %ni:输出整数。n 是数字,指代输出几个数字‘’ %m.nf: 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如 %8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数; 输出格式: \a: 输出警告声音; \b:输出退格键,也就是 Backspaced 键; \f:清除屏幕; \n:换行; \r:回车,也就是 Enter 键; \t:水平输出退格键,也就是 Tab 键; \v:垂直输出退格键,也就是 Tab 键 eg: print "%s" $(cat test.txt) 字符串输出test内容 来源: CSDN 作者: 饥饿小猪 链接: https://blog.csdn.net/Z0157/article/details/104630557

shell编程题(九)

做~自己de王妃 提交于 2020-03-03 07:28:51
文本分析,取出/etc/password中shell出现的次数 答案1: cat /etc/passwd | awk -F: '{if ($7!="") print $7}' | sort | uniq -c /etc/passwd 中的数据是以:隔开的 sort 是将文件中的每一行作为一个单位,互相比较。 比较的原则是从首字母向后,依次按照ASCII码值进行比较,最后将它们按照升序输出。 参数: -u 去除重复行 -r 降序输出 -o 输入到原文件 (重定向只能输入到新文件) -n 按数值排序 -t 后面可以设定间隔符 -k 指定列数。 -f 忽略大小写排序 -c 检查文件是否已排好序,如果乱序输出第一个乱序的行,最后返回1 -C 同上,不输出内存,仅返回1 -M 按照月份排序 -b 会忽略掉每一行前面的所有空白字符 uniq 检查及删除文本文件中重复出现的行列,一般与sort命令结合使用 uniq可检查文本文件中重复出现的行列 uniq [-c/d/D/u/i] [-f Fields] [-s N] [-w N] [InFile] [OutFile] 参数: -c: 在每列旁边显示该行重复出现的次数。 -d: 仅显示重复出现的行列,显示一行。 -D: 显示所有重复出现的行列,有几行显示几行。 -u: 仅显示出一次的行列 -i: 忽略大小写字符的不同 -f Fields:

活学活用linux shell之-实现1+2+3...+100=?的7种方法分享

喜你入骨 提交于 2020-03-02 08:10:47
活学活用linux shell之-实现1+2+3...+100=?的7种方法分享 前言: 本文通过 shell编程实现1+2+3...+100=?的7种方法 来活学活用shell, 学完本文你将熟悉 for,while,until循环的用法,及(()),let,expr等shell计算 命令的使用方法。 ------------------------------------------------- 4.(())的其它写法 [root@oldboy-B scripts]# cat for6.sh sum=0 for((i=1;i<=100;i++)) do sum=$((i+sum)) done echo $sum [root@oldboy-B scripts]# cat for7.sh sum=0 for((i=1;i<=100;i++)) do sum=$((i+$sum)) done echo $sum 提示:以上两结果都是对的 ------------------------------------------------- 5.使用until语句及(())计算 [oldboy @A ~]$ cat until-1.sh #!/bin/sh i=1 until ((i >100 )) do ((j=j+i)) ((i++)) done echo $j 提示

linux之shell脚本管理(一)

为君一笑 提交于 2020-02-29 14:05:43
在Shell脚本中执行使用if语句的好处是:可以根据特定的条件(eg:判断备份目录是否存在)来决定是否执行某项操作,当满足不同的条件时执行 不同的操作(eg:备份目录不存在则创建该目录,否则跳过操作)。该文将分别从条件测试操作,if语句结构,应用示例这三个方面讲解if语句在Shell 脚本中的应用。 1、条件测试操作: 需要在Shell脚本中有选择性地执行任务时,首先面临的问题就是,如何设置命令执行的条件? 在Shell环境中,可以根据命令执行后返回状态值来判断该命令是否成功执行,当返回值为0是表示成功执行,否则(非0值)表示执行失败。用于特定条件表达式的测试时,可以使用Linux系统中提供的专用工具——test命令、 使用test测试命令时,可以有以下两种形式。 test 条件表达式 【 条件表达式 】 这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是,方括号“[”或者“]”与条件表达式语句之间至少需要有一个空格进行分隔。 根据需要判断的条件内容不同,条件操作也不同,最常用的条件主要包括文件状态测试,比较整数值大小,比较字符串,以及同时判断多个条件时的逻辑关系,下面将分别进行讲解。以下主要采用方括号的测试形式。 1.1、测试文件状态 文件状态测试是指根据给定的路径名称,判断该名称对应的是文件还是目录,或者判断文件是否可读,可写,可执行等

shell编程

Deadly 提交于 2020-02-28 06:25:49
1,shell脚本的变量认识 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数,n是一个数字,表示第几个参数。例如第一个参数是$1,第二个参数是$2 $# 表示传递给脚本或者参数的个数 $* 传递给脚本或函数的所有参数 $@ 传递给函数互脚本的所有的参数,被双引号(“ ”),与$*稍有不同 $? 上个命令的退出状态,或函数的返回值 $$ 当前shell进程id。对于shell脚本,就是这些脚本所在的进程id 注释:$*和$@的区别: $*和$@都表示传递给函数或脚本的的所有的参数,不被双引号(“ ”)包含时,都以$1,$2,$3。。。$n的形式输出所有参数,但他们被双引号(“ ”)时,$*会将所有参数作为一个整体,以“$1, $2,$3...$n”的形式输出,$@会将各个参数分开,将以“$1”,“$2”,“$3”。。。“$n”的形式输出 2,一个简单的shell脚本文件 a="雪雪" echo "$a is my favourite" 注意:在定义变量和给变量赋值的时候,变量名和=之间不能有空格,=和变量之间也不要有空格 3,逻辑控制语句 a="雪雪" echo "$a is my favourite" if [ -n "$a" ];then echo "$a long time no see" else echo "$a i miss you" fi# 语法结构#