Shell 编程 入门篇(打好基础篇):

文章目录

      • 1、Shell 编程的脚本格式:
      • 2、分享一个自动给脚本添加注释的文件:
      • 3、使用 bash -n 命令查看脚本语法问题:
      • 4、使用 bash -x 查看脚本输出内容:
      • 5、脚本中的 exit 的作用:
      • 6、脚本中 sleep 的作用:
      • 7、脚本内外关于变量调用情况:
      • 8、关于在 [ ] 中引用变量:
      • 9、单引号 和 双引号的区别:


        此链接通往 Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
 


 

1、Shell 编程的脚本格式:

1: 脚本名字格式:  "*.sh" (一般 * 为英文大写或小写)


2: 脚本内容格式:  写脚本第一行表明你的shell环境(一般为 /bin/bash)
eg:   #!/bin/bash (标准格式)


3:一般在 标准格式下面,还可以添加一些其他的注释;
 eg: time 、 脚本的创造者啊、该脚本的作用(脚本名一般就可以看出是做什么的)...


4、关于 脚本的执行方法:

(1)、给脚本执行权限: chmod +x  *.sh ; 然后直接 "./*.sh" 即可;

(2)、直接使命令执行:  "/bin/sh  *.sh" (不需要执行权限也能执行!)

(3)、 cd /bin 目录下,然后创建脚本,"给执行权限",然后 直接输入脚本名即可!
root@zhengzelin:/bin# ll a.sh 
-rwxr-xr-x 1 root root 9 Mar 24 15:37 a.sh*
root@zhengzelin:/bin# a.sh 
aaa

 

2、分享一个自动给脚本添加注释的文件:

此文件内容来源于:https://edu.aliyun.com/lesson_1355_11660?spm=5176.10731542.0.0.324a22a0bdt0Az#_11660
(是来自马哥视频教学,如有侵权联系删除,感谢mage!)


root@zhengzelin:~# vim .vimrc 
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
        if expand("%:e") == 'sh'
        call setline(1,"#!/bin/bash")
        call setline(2,"#")
        call setline(3,"#********************************************************")
        call setline(4,"#Author:                     zhengzelin")
        call setline(5,"#Date:                       ".strftime("%Y-%m-%d"))
        call setline(6,"#FileName                    ".expand("%"))
	call setline(7,"#QQ:                         xxxxxxxx")
        call setline(8,"#********************************************************")
        call setline(9,"")
        endif
endfunc
autocmd BufNewFile * normal G

当你编写 .sh 脚本的时候,你会发现他自动生成了注释!

root@zhengzelin:~# ll -a
-rw-r--r--  1 root root   724 Mar 24 16:40 .vimrc


root@zhengzelin:~# vim test.sh
#!/bin/bash
#
#********************************************************
#Author:                     zhengzelin
#Date:                       2020-03-24
#FileName                    test.sh
#QQ:                         xxxxxxxx
#********************************************************
     

3、使用 bash -n 命令查看脚本语法问题:

"注意:说的是检查 语法问题!如果语法没问题也不代表你脚本%100执行成功"
"因为它只检查语法问题,语法没问题的话,但是你脚本中有其他命令敲错的话,这个是无法检查出来的"


root@zhengzelin:~# cat tests.sh 
hostna         # 很明显这个写错了
ls 
pwd

root@zhengzelin:~# bash -n tests.sh       # 没有发现错误!因为这是写错了,并不是语法错误!
                             
root@zhengzelin:~# ./tests.sh       # 除了错误的命令不运行,其他的命令正常运行
./tests.sh: line 9: hostna: command not found
a.txt b.txt .....
/root

什么叫语法错误?

root@zhengzelin:~# cat tests.sh 
if                 # 很明显 if判断句并不是这样用的,so 可以使用 bash -n
ls
pwd  


root@zhengzelin:~# bash -n tests.sh
tests.sh: line 12: syntax error: unexpected end of file

4、使用 bash -x 查看脚本输出内容:

root@zhengzelin:~# bash -x tests.sh 
+ ls
..... a.txt ...... b.txt
+ hostname
zhengzelin
+ pwd
/root

5、脚本中的 exit 的作用:

作用1:

在脚本中,一旦碰见 exit 则退出脚本!

*****************************************************************************************************************************

作用2:
脚本中 ,exit + 数字,表示 echo $? 时候的返回码,默认成功为0.

解释;如果你的脚本执行成功,当你使用 "echo $?" 的时候,会返回0,当你使用 "exit 10" 的时候,
脚本执行成功的话,"echo $?" 返回值为10,失败的话返回值为非10数!

******************************************************************************************************************************

注意: 当你使用 "echo $?" 来查看脚本执行返回码的时候,除非脚本中的最后一个命令执行错误会返回非0值!
如果脚本中间的命令执行错误,脚本末尾的命令执行正确;那么:
当你 "echo $?" 的时候,返回值一定是 0

6、脚本中 sleep 的作用:

当你执行完一条命令的时候,想让他休息一会在执行下一条命令!

使用 sleep 时间(s)

eg:休眠两秒 —— sleep 2

7、脚本内外关于变量调用情况:

你在脚本中,可以调用全局变量(环境变量)、位置变量、系统变量....
"唯独不能调用脚本外面的局部变量!"

eg:

root@zhengzelin:~# a=test
root@zhengzelin:~# cat aa.sh 
#!/bin/bash
echo $a
root@zhengzelin:~# /bin/sh aa.sh
[输出为空,变量不存在]


这是因为 脚本是在当前shell下开一个子shell去运行脚本内容!所以你的局部变量并不生效!

8、关于在 [ ] 中引用变量:

a=1 

当你 在  [ ] 里面印用 $a 的时候,注意使用 "" 引起来!

[ "$a" ]

9、单引号 和 双引号的区别:

root@zhengzelin:~# a="aaa bbb ccc";echo $a
aaa bbb ccc
root@zhengzelin:~# a='aaa bbb ccc';echo $a

单引号:将 ' ' 中的内容原封不动的赋值给 变量名!
双引号: " "  中 特殊符号的含义将保留!

上面的例子看不出来:现在再来看看他们的区别:
root@zhengzelin:~# a="abc $a";echo $a
abc aaa bbb ccc
root@zhengzelin:~# a='abc $a';echo $a
abc $a

懂了吗????

你可能感兴趣的:(shell,linux,shell,编程语言)