Linux中的sh命令的详细解释

Linux中的sh命令的详细解释,第1张

linxu下�š.sh命令相当于是shell命令语言的解释器。下面由我为大家整理了linux的sh命令的详细解释的相关知识,希望对大家有帮助!

一、Linux中的sh命令的详细解释

sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。通过用户输入命令,和内核进行沟通!Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

语法

bash [options] [file]

选项

-c string:命令从-c后的字符串读取。

-i:实现脚本交互。

-n:进行shell脚本的语法检查。

-x:实现shell脚本逐条语句的跟踪。

二、Linux中的sh命令的具体例子

使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:

[root@AY1307311912260196fcZ satools]# sh -x check_ssh_login.sh

+ DEFINE=30

+ cat /var/log/secure

+ awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'

++ cat /root/satools/black.txt

+ for i in '`cat /root/satools/black.txt`'

++ echo 121.42.0.16=1427

++ awk -F= '{print $1}' + IP=121.42.0.16

++ echo 121.42.0.16=1427

++ awk -F= '{print $2}'

+ NUM=1427

+ '[' 1427 -gt 30 ']'

+ grep 121.42.0.16 /etc/hosts.deny

+ '[' 1 -gt 0 ']'

+ echo sshd:121.42.0.16

+ echo vsftpd:121.42.0.16

+ for i in '`cat /root/satools/black.txt`'

++ echo 121.42.0.72=276

++ awk -F= '{print $1}'

+ IP=121.42.0.72

++ awk -F= '{print $2}'

++ echo 121.42.0.72=276

+ NUM=276 + '[' 276 -gt 30 ']'

+ grep 121.42.0.72 /etc/hosts.deny

+ '[' 1 -gt 0 ']'

+ echo sshd:121.42.0.72

+ echo vsftpd:121.42.0.72

三、Linux中对.sh文件的操作命令

1、创建test.sh文件

touch test.sh

2、编辑sh文件

vi test.sh

3、保存退出

敲击esc, 然后输入 :wq ,回车退出

4、添加可执行权限,当然默认就是可执行的。

chmod +x test.sh

5、运行文件

(1)./test.sh

(2)sh test.sh

6、删除文件

rm test.sh

1�€.sh是linux中运行shell的命令,是shell的解释器,shell脚本是linux中壳层与命令行界面,用户可以在shell脚本输入命令来执行各种各样的任务。

要运行shell脚本,首选需要给shell脚本权限,这里里以hello.sh文件为例,首先需要按下“crtl+shift+T”打开终端窗口:

2、接着先给“hello.sh”文件添加x权限chmod u+x hello.sh

3、输入“sh hello.sh”就开始执行shell脚本了,此时在终端中就输出了“hello!”的字样。以上就是用sh执行shell脚本的简单演示,当然Shell是一个功能相当强大的编程语言,有着易编写,易调试,灵活性较强的特点:

不太难,要是你花点时间学, shell 编程对於系统管理员或是一般使用者

都相当有用,除了自动化,还可写出一些有趣的小工具, 例如

我为自己写了个代替fortune 的小玩意,在 terminal 启动时执行脚本

它会连上 randomfunfacts.com, 随机地提供一些有趣的事实,和 vista

一个 gedget 一样,我在 .bash_profile 加入

# have some fun

if [ -x $(which funfacts) ]

then

funfacts | tee /etc/motd

else

fortune -s | tee /etc/motd

fi

而脚本放在 $HOME/bin

该脚本很简单,如是

#! /bin/bash

# get random fun facts from randomfunfacts.com, like `fortune'does.

# $prog: funfacts twfccc@gmail.com, twf_cc@yahoo.com.hk

# $required: lynx or links needed, gnu grep 2.5.X and bash 3.X or above

url="randomfunfacts.com" # the website

browser=lynx # default text browser

if which links &>/dev/null

then

browser=links # better choice if system provide

fi

if ! which lynx &>/dev/null &&! which links &>/dev/null

then

echo "lynx or links not found, sorry."

echo "Install one of them and execute script again."

exit 5

fi

case "$browser" in

links) facts="-dump $url | sed '/+-/,/+-/!d'"

lynx) facts="-dump $url | grep -A3 'U' | sed 1D"

esac

eval $browser $facts

exit 0

执行是这样

User@User-PC ~

$ funfacts

+------------------------------------------------------------------------------+

| An earthquake on Dec. 16, 1811 caused parts of the Mississippi River to flow |

| backwards! |

+------------------------------------------------------------------------------+

User@User-PC ~

$ funfacts

+------------------------------------------------------------------------------+

| An ostrich's eye is bigger than its brain. |

+------------------------------------------------------------------------------+

User@User-PC ~

$ !!

funfacts

+------------------------------------------------------------------------------+

| A crocodile cannot stick its tongue out. |

+------------------------------------------------------------------------------+

User@User-PC ~

$

也可用来写些实用工具,如到网站找最新代理服务器

$ cat bin/getproxy.sh

#! /bin/bash

# get update proxy list from www.proxy4free.com

# need gnu sed 4.1.X or above , bash 3.2.X or above

remotehost="www.proxy4free.com"

port=80

header="GET http://www.proxy4free.com/page1.html HTTP/1.0\n\n

Connection: Keep-Alive\n\n

Accept: text/html\n\n

Accept-Charest: iso-8859-1, *, utf-8\n\n

Accept-Language: en, zh, ja\n\n

Host: www.proxy4free.com:80\n\n

User-Agent: bash_script/0.1 [en, zh, ja] (Cygwin, NT)\n\n"

exec 5<>/dev/tcp/$remotehost/$port

printf "$header\n\n" >&5

sed -rn '/^<td>[0-9\.]+<\/td>$/p

/^<td>[0-9]+<\/td>$/p

/^<td>[a-z]+ ?[a-z]+<\/td>$/p

/^<td>[A-Z][a-z]+ ?[a-zA-Z]+<\/td>$/p

/^<td>20[0-1][0-9]-0?[1-9]+-0?[0-9]+<\/td>$/p' <&5 |

sed -r 's/^<td>(Name|IP|Port|Country|Type|Last Test)<\/td>$//g' |

sed '/^$/d' |

sed -r 's/<[^>]+>//g/20[0-1][0-9]-0?[1-9]+-0?[0-9]+/s//&\n----------------\n/g'

exec 5>&- 5<&-

awk 版本

User@User-PC ~

$ cat bin/getproxy.awk

#!/usr/bin/gawk -f

# get update proxy list from www.proxy4free.com

BEGIN{

header="GET http://www.proxy4free.com/page1.html HTTP/1.0\r\n\r\n \

Connection: Keep-Alive\n\r\n\r \

Accept: text/html\n\r\n\r \

Accept-Charest: iso-8859-1, *, utf-8\n\r\n\r \

Accept-Language: en, zh, ja\n\r\n\r \

Host: www.proxy4free.com:80\n\r\n\r \

User-Agent: gawk_script/0.99 [en, zh] (Cygwin, NT)\n\r\n\r"

host="www.proxy4free.com"

remotehost="/inet/tcp/0/" host "/80"

print header |&remotehost

while ((remotehost |&getline) >0){

sub(/^<td>(IP|Port|Country|Type|Last Test)<\/td>$/, "")

if ($0 ~ /^<td>[0-9\.]+<\/td>$/){

gsub(/<[^>]+>/, "")

print $0

} else if ($0 ~ /^<td>[0-9]+<\/td>$/){

gsub(/<[^>]+>/, "")

print $0

} else if ($0 ~ /^<td>[a-z]+ ?[a-z]+<\/td>$/){

gsub(/<[^>]+>/, "")

print $0

} else if ($0 ~ /^<td>[A-Z][a-z]+ ?[a-zA-Z]+<\/td>$/){

gsub(/<[^>]+>/, "")

print $0

} else if ($0 ~ /^<td>20[0-1][0-9]-0?[1-9]+-0?[0-9]+<\/td>$/){

gsub(/<[^>]+>/, "")

print $0

printf("\n----------------\n")

} else {

continue

}

}

close(remotehost)

}

shell 是用Linux 必学的一环,我应为用途很大,你看是不是? :)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7175032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存