Shell 入门教程

Shell 教程

=======================================================================================

Shell 教程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 在线工具


Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。


Shell 环境

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。


第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

实例

#!/bin/bash
echo "Hello World !"

运行实例 »

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

运行 Shell 脚本有两种方法:

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

 

出处:https://www.runoob.com/linux/linux-shell-variable.html

=======================================================================================

在Linux中查看系统支持的shell类型

[root@node1 ~]# cat /etc/shells
/bin/sh                  # Linux常用的shell,指向/bin/bash。
/bin/bash                # Linux常用的shell,默认使用的shell。
/sbin/nologin            # Linux常用的shell,用于禁止用户登录。
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh


查看系统默认shell,两种方式

[root@node1 ~]# echo $SHELL
/bin/bash
[root@node1 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
末尾的/bin/bash就是用户登录后使用的shell


查看bash版本

[root@node1 ]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[root@node1 ]# bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 


检测是否有bash漏洞

[root@node1 system]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
this is a test
# 出现上述表示正常
[root@node1 system]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
be careful
this is a test
# 表示存在漏洞,需尽快修复

 

升级bash

yum update bash -y

 

shell脚本的执行方式

bash script-file或sh script-file,不需要文件有可执行权限。
path/script-file或./script-file,文件需要有可执行权限。
source script-file或 . script-file,读入脚本并执行脚本;在当前shell中加载并执行脚本文 件(其他运行shell脚本的方式会产生一个子shell来执行)
bash < script-file或cat script-file|bash

 

出处:https://blog.csdn.net/qq_29767087/article/details/90705657

=======================================================================================

Shell教程快速入门

Shell即是一种命令语言,又是一种程序设计语言,使用者可以通过Shell访问操作系统的内核服务。

Shell编程和java、python、C一样,只要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了,Linux的Shell种类众多,我们只关注与Bash(Bourne Again Shell  (/bin/bath))

#! /bin/sh#! /bin/bash没多大区别,#!告诉系统需要什么解释器来执行该Shell脚本程序。

shell的打印输出函数 echo

从键盘获取输入信息---- read 

 

read  name                   //从键盘数据保存在name变量中
echo "从键盘获取的信息是 $name" 

 

1、read命令提供了-p参数,-p后面的字符串会显示出来

read -p "输入第一个数字:" a    #获取键盘输入的 a 变量数字
read -p "输入第二个数字:" b    #获取键盘输入的 b 变量数字
r=$[a+b]                    #计算a+b的结果 赋值给r  不能有空格
echo "sum = ${r}"        #输出显示结果 r

输出结果

输入第一个数字:1
输入第二个数字:2
sum = 3

2、计时输入

使用read命令存在着潜在危险。脚本会阻塞下来等待用户的输入。如果无论是否输入数据脚本都必须继续执行,可以使用-t选项指定一个计时器。

 

复制代码
if read -t 5 -p "please enter your name:" name
then
    echo "hello $name ,welcome to my script"
else
    echo "sorry,too slow"
fi
复制代码

 

3、设置read命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

复制代码
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
      echo "fine ,continue";;
N | n)
      echo "ok,good bye";;
*)
     echo "error choice";;
esac
复制代码

使用了-n选项,后接数值1,指示read命令只要接受到一个字符就退出

4、读文件

还可以使用read命令读取Linux系统上的文件。每次调用read命令都会读取文件中的"一行"文本。当文件没有可读的行时,read命令将以非零状态退出。读取文件的关键是将文本中的数据传送给read命令,最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令

复制代码
count=1    //赋值语句,不加空格
cat test | while read line        //cat 命令的输出作为read命令的输入,read读到的值放在line中
do
   echo "Line $count:$line"
   count=$[ $count + 1 ]          //注意中括号中的空格。
done
echo "finish"
exit 0
复制代码

Shell单行注释 注释内容

多行注释

:<<EOF

注释内容...

注释内容...

EOF

EOF也可以使用其他字符,只要前后保持一致就行。

运行 Shell 脚本有两种方法:

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #在当前目录执行脚本test.sh

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

3、在Git Bash命令行中运行.sh文件

 $ sh test.sh

Shell变量

定义变量时,变量名不加美元符号"$",如:

you_name="LXP-Never"

变量名和等号之间不能有空格, 这和我们熟悉的python编程语言不一样,但是变量名的命名规则是一样的。

使用变量

使用一个定义过的变量,只需在变量名前面加美元符号即可

name="LXP"
echo $name
echo ${name}

变量名外面的花括号是可选的,加不加都行,如果加了花括号更加方便的识别变量的边界。推荐给所有的变脸加上花括号,这是一个好的编程习惯。

只读变量  readonly name,只读变量的值不能被改变,不能被unset删除

删除变量  unset name

Shell字符串,字符串可以用单引号,也可以用双引号,也可以不用。但是使用双引号可以用$符号使用变量,还可以使用转义字符\

复制代码
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1            # hello, runoob ! hello, runoob !
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3        # hello, runoob ! hello, ${your_name} !
复制代码

获取字符串长度

string="abcd"
echo ${#string}            # 4
expr length "$string"    # 4

提取子字符串

以下实例从字符串第2个字符开始截取4个字符,取不到开始索引

var="http://www.aaa.com/123.htm"
echo ${string:1:4}     # ttp:

 从左边第几个字符开始,一直到结束,取不到开始索引

echo ${var:7}    # is a great site

 从右边第几个字符开始,的几个字符

echo ${var:0-7:3}    # 123

 从右边第几个字符开始,一直到结束。

echo ${var:0-7}    # 123.htm

Shell数组

从0开始索引

定义数组,用空格分割不同的数组元素

array_name=(value1 value2 value3 ...valuen)

读取数组

读取数组元素值得一般格式是:

${数组名[下标]}

valuen=${array_name[n]}

使用 @ 符号可以获取数组中的所有元素

echo ${array_name[@]}

获取数组的长度

复制代码
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
复制代码

截取

###号截取,删除边的字符  ${var#*//}  # 删除var左边的字符,直到遇到第一个//

%%%号截取,删除边的字符  ${var%//*}  # 删除var左边的字符,直到遇到第一个//

var=http://www.aaa.com/123.htm
echo ${var#*//}    # www.aaa.com/123.htm
echo ${var##*/}    # 123.htm
echo ${var%/*}        # http://www.aaa.com
echo ${var%%/*}    # http:

关系运算符

关系运算符只支持数字,不支持字符串

a=10  b=20

运算符说明举例

-eq

检测两个数是否相等,相等返回 true。

aeq
a−eq b ]
返回 false。

-ne

检测两个数是否不相等,不相等返回 true。

[ anea−ne b ] 返回 true。

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

[ agta−gt b ] 返回 false。

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

[ alta−lt b ] 返回 true。

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true。

[ agea−ge b ] 返回 false。

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

[ alea−le b ] 返回 true。

文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

操作符说明举例
-d file 检测文件是否是目录(在linux中目录就是文件夹的意思),如果是,则返回 true。 [ -d $file ] 返回 false。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。

布尔运算符

运算符说明举例

!

非运算

[ ! false ] 返回 true。

-o

或运算

[ alt20oa−lt20−o b -gt 100 ] 返回 true。

-a

与运算

[ alt20aa−lt20−a b -gt 100 ] 返回 false。

逻辑运算符

运算符说明举例

&&

逻辑的 AND

[[ a -lt 100 &&a -lt 100 && b -gt 100 ]] 返回 false

||

逻辑的 OR

[[ alt100||a−lt100|| b -gt 100 ]] 返回 true

 

字符串运算符

运算符说明举例

=

检测两个字符串是否相等,相等返回 true。

[ a=a= b ] 返回 false。

!=

检测两个字符串是否相等,不相等返回 true。

[ a!=a!= b ] 返回 true。

-z

检测字符串长度是否为0,为0返回 true。

[ -z $a ] 返回 false。

-n

检测字符串长度是否为0,不为0返回 true。

[ -n "$a" ] 返回 true。

str

检测字符串是否为空,不为空返回 true。

[ $a ] 返回 true。

Shell流程控制

if else

if condition1

then

  command1

elif condition2

then

  command2

else

  command3

fi

for循环

for var in item1 item2 ... itemN
do
  command1
done

while语句

while condition
do
  command
done

case

Shell case语句为多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case num in
  1) command1

  ;;

  2) command2

  ;;
esac

跳出循环

break、continue

Shell函数

funname(){

  echo "这是我的第一个Shell函数"

}

echo "调用函数"

funname

可以使用return返回函数

函数参数

在函数内部通过使用 $n 的形式来获取参数的值,例如,11表示第一个参数, 2表示第二个参数...

复制代码
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第十个参数为 ${10} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
复制代码

输出结果:

第一个参数为 1 !
第十个参数为 10 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意,1010不能获取第十个参数,获取第十个参数需要 {10}。当n>=10时,需要使用${n}来获取参数。

$#  传递到脚本的参数个数

$*  以一个单字符串显示所有向脚本传递的参数

shell文件导入

. filename  # 注意点号(.)和文件名中间有一空格

如:

test1.sh文件内

url="作者的名字是:"

在test2.sh脚本文件内导入test1.sh脚本

. ./test1.sh
echo "${url}不告诉你"

添加可执行权限并执行,然后执行test2.sh脚本,

$ chmod +x test2.sh 
$ ./test2.sh 
作者的名字是:不告诉你

参考文献

linux菜鸟教程

从键盘获取输入read

作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。

 

 

出处:https://www.cnblogs.com/LXP-Never/p/10203160.html

=======================================================================================

Linux shell十分钟轻松入门

一、什么是shell?

Shell是什么?

1、Shell 是一个程序,Linux默认是用bash。

Shell 是一个用 C 语言编写的程序,既是一种命令语言,又是一种程序设计语言,是用户使用Linux的桥梁。

Linux上的Shell有很多种类,如mac上常用zsh, ubuntu用dash,而常用的Linux上则用bash,即Bourne Again Shell(/bin/bash) , Bourne Shell(/usr/bin/sh或/bin/sh)的扩展版 。

2、shell script是使用shell的脚本。

我们通常说的 shell 是指 shell 脚本, 即shell script,是一种为 使用shell 编写的脚本程序。它的文件后缀为.sh,跟.bat、.js、.ptyhon都没有什么本质区别,无非不同环境下的可执行文件。

3、所有脚本无非是命令和流程控制的组合。

if判断条件,for、while循环,所有程序无出其右。

Shell编程能做什么?有什么优势?

1、将我们常用的命令固化,将很多步骤做的事合为一个脚本来做。

2、常用来进行我们程序部署时的启动、停止开关。

3、作为一个脚本语言,并且在Linux中有着天然的执行环境,轻量、方便。

了解shell对 开发/运维/测试 有什么好处?

1、轻松胜任部署工作;

2、熟悉Linux命令及其工作机制;

3、排查线上问题很方便;

4、扩宽解决问题的思路,拓展解决方案。

二、shell的基本语法

我将shell的基本语法分为三块:变量、运算符、条件、循环、函数。

PS.其实任何语言基本都是这几块组成。

变量

变量赋值

示例:

war_name=yao。

注意:

1、变量名和等号之间不能有空格。

2、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

3、中间不能有空格,可以使用下划线(_)。

4、不能使用标点符号,如点“.”。

5、不能使用bash里的关键字(可用help命令查看保留关键字)。

变量使用

示例:

echo ${war_name}

echo $war_name

echo “war name is $war_name

变量传参

1、$# 传递到脚本的参数个数

2、$1 传递到脚本的第一个参数,1为n

3、$* 所有参数合成一个字符串

4、$@ 所有参数,一个数组

5、$$ 当前脚本运行的进程号,pid

第一个示例脚本

vi 001.sh

#!/bin/sh
# author:姚毛毛的博客

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

输出结果:

Shell 传递参数实例!
第一个参数为:1
参数个数为:5
传递的参数作为一个字符串显示:1 2 3 4 5

运算符 & 算术命令

常用运算符

运算符说明
+、- 、* 、/、% 数值: 加、减、乘、除、余
!、-o、-a、&& 、|| 逻辑:非、与、或、and、or
==、!=、<、<= 、> 、>= 比较:等于、非等于、小于、小于等于、大于、大于等于
=、+=、-=、*=、/=、&= 赋值:等于、加等于、减等于、乘等于、除等于、余等于
~、|、&、^ 按位比较: 按位取反、按位异或、按位与、按位或
<< 、 >> 位运算: 向左移位、向右移位
++、-- 自增、自减

关系运算符

关系运算符不只支持数字比较,也是支持字符比较的。

关系运算符说明示例
-eq 相等返回true,写法 [\$a -eq \$b] [ \$a -eq \$b ] 返回 true
-ne 不相等返回true [ \$a -ne \$b ] 返回 true]]
-gt 大于返回true [ \$a -gt \$b ] 返回 false]]
-lt 小于返回true [ \$a -lt \$b ] 返回 true
-ge 大于等于返回true [ \$a -ge \$b ] 返回 false
-le 小于等于返回true [ \$a -le \$b ] 返回 true

文件测试运算符

运算操作符与运算命令说明
-d file 检测文件是否是目录,是则返回 true。 写法 [ -d $file ]
-f file 是否是普通文件
-r file 是否可读
-w file 是否可写
-x file 是否可执行
-s file 是否为空(文件大小是否大于0)
-e file 检测文件(包括目录)是否存在

运算操作符与运算命令

运算操作符与运算命令说明
[()] 整数运算常用,效率高
let 类似于“[()]”
expr 手工命令行计数器,一般用于整数值,也可用于字符串
bc 计算器
$[] 整数运算
awk shell命令神器
declare 可定义变量和属性,-i参数可定义整形变量

条件

if

if condition
then
    command1 
    command2
    ...
    commandN 
fi

if else-if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

case

casein
模式1)
    command1
    ;;
模式2)
    command1
    ;;
esac 

循环

for

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

while

while condition
do
    command
done

condition为false,则停止

until

until condition
do
    command
done

condition为true则停止,一般不用

函数

function

[ function ] funname [()]

{

    action;

    [return int;]

}

示例

#!/bin/bash
# author:yaomaomao

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----“

输出结果:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

特殊符号

符号类型常用符号
注释符 #
管道符 |
重定向输入输出 <、<< ,> 、>>与 0 、1、2
匹配符 ? 、*
引号 ’’、””
后台进程符 &
常运行命令 nohup

符号用法与释义

服务运行命令示例与释义:

nohup Xxx  > /dev/null 2>&1 &

2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

nohup 为no hang up,不人为中断会一直运行,一般与&一起用

& 表示后台运行,终端退出则结束进程

测试一下重定向

ls 2>1 

测试一下,不会报没有2文件的错误,但会输出一个空的文件1

ls xxx 2>1

没有xxx这个文件的错误输出到了1中;

ls xxx 2>&1

与&之间不能有空格,此时可以观察下结果。不会生成1这个文件了,因为错误跑到标准输出了;

ls xxx > s.log 2>&1 
# 实际上写全应该是 ls xxx 1> s.log 2>&1

重定向符号>默认是1,错误和输出都传到s.log了

脚本执行

执行示例

1、相对路径

./001.sh

2、绝对路径

/root/shell/001.sh

3、不需要脚本执行权限,只需要bash权限

sh 001.sh
bash 001.sh

4、当前shell环境执行

source 001.sh 、 . 001.sh

1和2为开启子进程执行脚本,执行完毕,关闭子进程;

3、4则是在当前shell环境下执行,适合被执行程序中有对环境变量的增改,又希望保留到当前shell环境中的情况。

脚本实战

1、批量创建文件、文件夹

2、批量替换文件内容

3、查找大文件并询问删除

4、自动删除过期文件

5、持续输出磁盘、cpu、内存的监控结果

以上题目都是生产中会常用的一些脚本。恩,具体的内容,嘿嘿,下次再说吧。

 

 

出处:https://www.cnblogs.com/yaomaomao/p/13097828.html

=======================================================================================

Shell 简单入门教程

大数据开发岗为什么要学习Shell呢?
1)需要看懂大数据运维岗人员编写的Shell程序。
2)偶尔会编写一些简单Shell程序来管理集群、提高开发效率

艺多不压身

Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强

Shell解析器
Linux提供的Shell解析器有:

[root@Bigdata ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

Centos默认的解析器是bash

[root@Bigdata bin]$ echo $SHELL
/bin/bash

Shell脚本入门
1.脚本格式
脚本以#!/bin/bash开头(指定解析器)
2.第一个Shell脚本:helloworld
(1)需求:创建一个Shell脚本,输出helloworld
(2)案例实操:

[root@Bigdata shell]$ touch helloworld.sh
[root@Bigdata shell]$ vi helloworld.sh

在helloworld.sh中输入如下内容

#!/bin/bash
echo "helloworld"

(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
sh+脚本的相对路径

[root@Bigdata shell]$ sh helloworld.sh 
helloworld

sh+脚本的绝对路径

[root@Bigdata shell]$ sh /opt/shell/helloworld.sh 
helloworld

bash+脚本的相对路径

[root@Bigdata shell]$ bash helloworld.sh 
helloworld

bash+脚本的绝对路径

[root@Bigdata shell]$ bash /opt/shell/helloworld.sh 
helloworld

第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
(a)首先要赋予helloworld.sh 脚本的+x权限

[root@Bigdata shell]$ chmod 777 helloworld.sh

(b)执行脚本
相对路径

[root@Bigdata shell]$ ./helloworld.sh 
helloworld

绝对路径

[root@Bigdata shell]$ /opt/shell/helloworld.sh 
helloworld

注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

3.第二个Shell脚本:多命令处理
(1)需求:
在/opt/shell/目录下创建一个huan.txt,在huan.txt文件中增加“huanhuan”。
(2)案例实操:

[root@Bigdata shell]$ touch huan.sh
[root@Bigdata shell]$ vim huan.sh

在huan.sh中输入如下内容

#!/bin/bash

cd /opt/shel
touch huan.txt
echo "huanhuan" >> huan.txt

 

出处:https://www.cnblogs.com/cnoneblog/p/14347723.html

=======================================================================================

Shell 快速入门(零):目录

Shell 快速入门定位于快速帮助初学者掌握 Shell 的语法,快速编写 Shell 脚本。对于 Shell 学习者来说,应该将 Shell 当成是工具,掌握了基础的语法之后就直接使用。当后面需要一些更高级的语法或者功能时,再去查找相应的资料。

这个系列与其他 Shell 入门教程不同的是:这个系列专注于用最少的知识,让你快速掌握必须的语法,最终实现快速上手的目的。所以在很多地方,我们并不追求大而全,而是追求实用。

如果你只是想简单掌握如何使用 Shell,那么你只看前 15 篇就够了。

在这之后的文章,作为 Shell 快速入门的补充。当你需要使用更加高级的语法时,你可以来这里看看有没有对应的例子。这个系列会根据情况不断地增加,如果你觉得有很好的文章要补充,也欢迎一起完善。

 

出处:https://www.cnblogs.com/chanshuyi/p/quick_start_of_shell_00_guide.html

=======================================================================================

=======================================================================================

=======================================================================================

posted on 2020-03-12 20:07  jack_Meng  阅读(912)  评论(0编辑  收藏  举报

导航