1. linux下执行.sh文件的方法
       .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。 
      
      是bash脚本么
      可以用touch test.sh #创建test.sh文件
      vi test.sh #编辑test.sh文件
      加入内容
      #!/bin/bash
      mkdir test
      保存退出。
      chmod a+x test.sh #给test.sh可执行权限
      如test,sh文件在 /home/work文件下
      执行
      方法一 本身目录下运行
      进入 cd /home/workwen文件下
      执行 ./test.sh
      命令会在当前目录下创建一个“test”目录。
      方法二 绝对路劲运行
      执行 /home/work/test.sh 
      方法三 本身目录下运行
      sh test.sh
      最后建议:使用
      
      C代码
      1.man sh   
      man sh 来看看sh 的介绍~

linux.sh语法

介绍:
1 开头
 程序必须以下面的行开始(必须放在文件的第一行):
#!/bin/sh
 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。
 要使编写脚本可执行:
 编译 chmod +x filename 这样才能用./filename 来运行
2 注释
 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
 如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
3 变量
 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
#!/bin/sh
 #对变量赋值:
 a=”hello world”
# 现在打印变量a的内容:
 echo “A is:”
 echo $a
有时候变量名很容易与其他文字混淆,比如:
 num=2
 echo “this is the $numnd”
 这并不会打印出”this is the 2nd”,而仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
 num=2
 echo “this is the ${num}nd”
 这将打印: this is the 2nd
4 环境变量
 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
5 Shell命令和流程控制
在shell脚本中可以使用三类命令:
1)Unix 命令:
 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
 常用命令语法及功能
 echo “some text”: 将文字内容打印在屏幕上
 ls: 文件列表
 wc –l file   wc -w file   wc -c file: 计算文件行数;计算文件中的单词数;计算文件中的字符数
 cp sourcefile destfile: 文件拷贝
 mv oldname newname : 重命名文件或移动文件
 rm file: 删除文件
 grep ‘pattern’ file: 在文件内搜索字符串比如:grep ’searchstring’ file.txt
 cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,
 这是两个完全不同的命令
 cat file.txt: 输出文件内容到标准输出设备(屏幕)上
 file somefile: 得到文件类型
 read var: 提示用户输入,并将输入赋值给变量
 sort file.txt: 对file.txt文件中的行进行排序
 uniq: 删除文本文件中出现的重复行,比如: sort file.txt | uniq
 expr: 进行数学运算Example: add 2 and 3   为   expr 2 “+” 3
 find: 搜索文件比如:根据文件名搜索find . -name filename -print
 tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
 basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
 dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
 head file: 打印文本文件开头几行
 tail file : 打印文本文件末尾几行
 sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将
 结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus替换为 LinuxFocus :cat text.file |
sed ’s/linuxfocus/LinuxFocus/’ >newtext.file

awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。
 cat  file.txt | awk -F, ‘{print $1 “,”
$3}’这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34,
IndiaKerryMiller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
 这些不是系统命令,但是他们真的很重要。
 管道 (|) 将一个命令的输出作为另外一个命令的输入。
 grep “hello” file.txt | wc -l
 在file.txt中搜索包含有”hello”的行并计算其行数。
 在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
 重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
 > 写入文件并覆盖旧文件
 >> 追加到文件的尾部,保留旧文件内容。
 反短斜线
 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
 命令:
 find . -mtime  -1  -type  f  -print
 用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下linux 脚本:
 #!/bin/sh
 # The ticks are backticks (`) not normal quotes (‘):
 tar -zcvf  lastmod.tar.gz `find . -mtime -1 -type f -print`
3) 流程控制
 1.if
 “if” 表达式 如果条件为真则执行then后面的部分:
 if ….; then
 ….
 elif ….; then
 ….
 else
 ….
 fi
 大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
 通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
 [ -f "somefile" ] :判断是否是一个文件
 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
 [ -n "$var" ] :判断$var变量是否有值
 [ "$a" = "$b" ] :判断$a和$b是否相等
 执行man test可以查看所有测试表达式可以比较和判断的类型。
 直接执行以下脚本:
 #!/bin/sh
 if [ "$SHELL" = "/bin/bash" ]; then
 echo “your login shell is the bash (bourne again shell)”
 else
 echo “your login shell is not bash but $SHELL”
 fi
 变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。
 快捷操作符
 熟悉C语言的朋友可能会很喜欢下面的表达式:
 [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
 这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。
 您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印” This computer uses shadow passwors”。同样或操作(||)在shell编程中也是可用的。这里有个例子:
 #!/bin/sh
 mailfolder=/var/spool/mail/james
 [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; }
 echo “$mailfolder has mail from:”
 grep “^From ” $mailfolder
 该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
 ◆打印错误信息
 ◆退出程序
 我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
 不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。

linux下执行.sh文件的方法和语法的更多相关文章

  1. Linux下执行.sh文件

    Linux下执行.sh文件有两种情况: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh,如运行hello.s ...

  2. linux 下执行.sh文件总是提示permission denied

      linux 下执行.sh文件总是提示permission denied 如果你是root登陆的话(不是的话,切换到root用户,对*.sh赋可执行的权限) chmod 777 *.sh or ch ...

  3. linux 下执行.sh文件提示permission denied

    linux 下执行.sh文件提示permission denied 在脚本文件目录下运行命令,赋予权限: chmod 777 *.sh or chmod +x  *.sh

  4. linux下执行sh文件报错:oswatcher_restart.sh: line 13: ./startOSW.sh: Permission denied

    1 查看执行sh文件的内容 [root@xxxdb0402 dbscripts]# more oswatcher_restart.sh  #!/usr/bin/ksh #export oswdir=` ...

  5. [转帖]Linux下批量替换文件内容方法

    Linux下批量替换文件内容方法 https://www.cnblogs.com/fjping0606/p/4428850.html 刚才用到的命令 原作者写的挺好的记录一下 以后 用. 1:查找fi ...

  6. 报错解决——linux下执行sh出现异常"syntax error: unexpected end of file"

    有时我们在linux下执行一个sh文件,会报错“SYNTAX ERROR:UNEXPECTED END OF FILE”,这个现象主要是工作的系统环境改变造成的. 若最初脚本中是在windows下,使 ...

  7. 解决Linux下编译.sh文件报错 “[: XXXX: unexpected operator”

    本人经常在Linux通过编译 .sh文件来生成工程,之前一直都没问题,代码一直都没变,但是今天编译的时候,却提示错误:

  8. windows与linux下执行.class(包含main方法)

    来源:http://blog.csdn.net/hanqunfeng/article/details/4327325 一般来说,执行一个java文件采用执行jar包的方式最为方便(java -jar ...

  9. Linux下打开超大文件的方法

    Linux下打开超大文件方法 在Linux下用VIM打开大小几个G.甚至几十个G的文件时,是非常慢的. 这时,我们可以利用下面的方法分割文件,然后再打开. 1 查看文件的前多少行 head -1000 ...

随机推荐

  1. python基础教程(第二版)

    开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3 ...

  2. Confluence 6 数据库字符集编码和问题

    数据库字符集编码 你的数据库和 JDBC 数据源连接必须配置为使用 UTF-8 编码(或者根据你配置的数据库来制定正确的 UTF-8 编码字符集,例如在 Oracle 中使用的是 AL32UTF8 ) ...

  3. Java并发编程基础-ReentrantLock的机制

    同步锁: 我们知道,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁 ...

  4. dubbo源码之Directory与LoadBalance

    Directory: 集群目录服务Directory, 代表多个Invoker, 可以看成List<Invoker>,它的值可能是动态变化的比如注册中心推送变更.集群选择调用服务时通过目录 ...

  5. LeetCode(120):三角形最小路径和

    Medium! 题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...

  6. 剑指offer 二叉树的层序遍历

    剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...

  7. python(7):sympy模块

    sympy主要用于符号计算 1,基本操作 from sympy import* #from sympy import pprint #x=Symbol('x')#也可以这么单个定义 #y=Symbol ...

  8. poj3162 树形dp|树的直径 + 双单调队列|线段树,好题啊

    题解链接:https://blog.csdn.net/shiqi_614/article/details/8105149 用树形dp是超时的,, /* 先求出每个点可以跑的最长距离dp[i][0|1] ...

  9. centos7.5上一步步部署jumpserver

    1.基础环境:centos7.5:关闭防火墙和selinux 2.修改字符集,否则可能会报input/output error 的问题,因为日志里打印了中文 [root@xzw ~]# localed ...

  10. SQL语法汇总

    以下默认为mySQL与SQLsever都能使用SQLsever不能使用的另外标出来了 显示数据库SHOW DATABASES;进入其中一个数据库USE students;显示进入数据库中的所有表SHO ...