‘壹’ 在linux C语言下,可执行的Shell脚本文件与编译之后的C可执行文件的区别有哪些
二进制文件是机器码,可直接执行,而shell脚本是文本,需依赖sh来解析并执行,shell脚本的第一行一般类似这样:
#!/bin/sh
有了这行,且有执行权时,就可以支持 ./ 方式执行,如果没有这行,或没有执行权时,则只支持 sh xxx 这种方式
简单的识别方法:
用 file 命令识别:
XXX: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=, stripped
XXX.sh: POSIX shell script, ASCII text executable
‘贰’ Linux里面基本的shell脚本编写有哪些
shell脚本就是一些命令的集合。
举个例子,我想实现这样的操作:
1)进入到/tmp/目录;
2)列出当前目录中所有的文件名;
3)把所有当前的文件拷贝到/root/目录下;
4)删除当前目录下所有的文件。
简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。《linux 就该这么学》
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,在前面讲过的。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是笔者不建议省略。因为随着你工作时间的增加,你写的shell脚本也会越来越多,如果有一天你回头查看你写的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。该脚本再往下面则为要运行的命令了。
‘叁’ Linux下面如何运行 SH文件
本文介绍Linux下面用命令如何运行.sh文件的方法,有两种方法:
一、直接./加上文件名.sh,如运行hello.sh为./hello.sh【hello.sh必须有x权限】
二、直接sh 加上文件名.sh,如运行hello.sh为sh hello.sh【hello.sh可以没有x权限】
工具/原料
windows、linux
xshell
方法一:当前目录执行.sh文件
1
【步骤一】cd到.sh文件所在目录
比如以hello.sh文件为例,如下图
注意事项
用“./”加文件名.sh执行时,必须给.sh文件加x执行权限
如果对您有帮助,帮忙点“有得”,有助于您是我们进步的最大动力!
如果您喜欢,请点“投票”,您的参与是我们进步的最大动力!
如果您有疑问,请提交疑问,与您的互动是我们进步的最大动力!
仅供参考
‘肆’ Linux下怎么通过shell批量修改文件名后缀
比如修改一下目录下的所有文件的后缀
ls -l|awk '{print $9}'|xargs -I{} mv {} {}.bak
[root@ test]# touch a b c
[root@ test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Apr 27 21:50 a
-rw-r--r-- 1 root root 0 Apr 27 21:50 b
-rw-r--r-- 1 root root 0 Apr 27 21:50 c
[root@ test]# ls -l|awk '{print $9}'|xargs -I{} mv {} {}.bak
[root@ test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Apr 27 21:50 a.bak
-rw-r--r-- 1 root root 0 Apr 27 21:50 b.bak
-rw-r--r-- 1 root root 0 Apr 27 21:50 c.bak
‘伍’ linux shell问题 判断文件后缀
root@Bizbox:~# filename="test.tar.gz"
root@Bizbox:~# echo ${filename##*.}
gz
root@Bizbox:~# if [ "${filename##*.}" = "gz" ]; then
> tar -zxf ${filename}
> elif [ "${filename##*.}" = "bz2" ]; then
> tar -jxf ${filename}
> fi
不知道是不是你想要的!