シェルの知識ポイントのまとめ
shell知识点小结
目录
- 引言
-
shell中的数组
- 数组的定义
- 数组的使用
- 实际的例子
- 数组的定义
- shell中大小的比较
- shell中的括号
- shell中函数的定义
-
杂项知识点
- 字符串转数组
- 常用判断标志
- linux后台运行相关
- 字符串转数组
参考文献
引言
SHELL在处理一些问题的时候有得天独厚的优势,快捷方便,学会了还可以显摆显摆,当然了,shell的语法有点坑爹,没有系统的学过,只能一点一点的积累。
今天这个是在实现一个刷新数据库数据的脚本的时候碰到的一些知识点,刷新的时候用到了正则匹配、数学运算、比较等等。
shell中的数组
数组的定义
<code>arr=(1 2 3 4 5)arr=(燕睿涛 yrt lulu yanruitao)arr=('^[0-9]+$' '^yrt\.(\d+)\.log$')arr=( "燕睿涛" \ "yanruitao" \ "today is a good day!")</code>
数组的使用
<code>len=${#arr[@]} #返回的是数组元素的个数echo ${arr[0]} #数组中的第一个元素,这个和其他语言的数组类似,下表从0开始echo ${arr[2]} #数组中的第3个元素</code>
实际的例子
<code>[[email protected]_runtime sh]$ arr=(> "燕睿涛"> "http:\/\/www\.baidu\.com\/(\d+)\.html"> "yanruitao"> "lulu"> "yrt"> )[[email protected]_runtime sh]$ echo ${#arr[@]}5[[email protected]_runtime sh]$ echo ${arr[1]}http:\/\/www\.baidu\.com\/(\d+)\.html[[email protected]_runtime sh]$ echo ${arr[0]}燕睿涛[[email protected]_runtime sh]$ echo ${arr[5]}[[email protected]_runtime sh]$</code>
shell中的大小比较
<code>#第一种(())if((6 <8)); then echo "yes 燕睿涛"; fi #输出——yes 燕睿涛if(($a>8)); then echo "yes 燕睿涛"; fiif(($a<=$b)); then echo "yes 燕睿涛"; fi#第二种[] [[]]if [ 2 -gt 1 ]; then echo "iforever 燕睿涛"; fiif [[ 'abc' > 'ab' ]]; then echo "iforever 燕睿涛"; fi #iforever 燕睿涛if [[ 2 < 10 ]]; then echo "iforever 燕睿涛"; fi #无输出if [[ 2 -lt 10 ]]; then echo "iforever 燕睿涛"; fi #iforever 燕睿涛</code>
可以看到上面这几种还是有些规律的:
- 双小括号[(())]里面是可以直接使用大于小于号进行比较(>、<、<=、>=),而且不需要“坑爹”的空格,用于数学计算
- 单中括号([])里面比较必须使用-gt、-lt、-ne、-eq这些运算符,而且必须要有严格的空格要求
- 双中括号([[]])里面比较可以使用>、<、-gt、-lt......这两种格式,但是还是必须要有严格的空格要求,而且双中括号中的>、<对类似于字符串的比较,所以在使用的时候需要注意
shell中的括号
<code>#看看小括号的用法,首先是在for循环里面,相当于还是数学计算[[email protected]_runtime ad]$ for((a=0;a<10;a++))> do> echo $a> done0123456789#对变量进行++,还是相当于数序运算[[email protected]_runtime ad]$ i=1[[email protected]_runtime ad]$ echo $i1[[email protected]_runtime ad]$ let i++[[email protected]_runtime ad]$ echo $i2[[email protected]_runtime ad]$ ((i++))[[email protected]_runtime ad]$ echo $i3#数学运算[[email protected]_runtime ad]$ echo 1+21+2[[email protected]_runtime ad]$ echo $((1+2))3#单括号里面是一个命令组,括号中的命令将会新开一个shell顺序执行,所以这个里面相当于一个封闭的空间,里面的变量什么的不能被剩余代码使用[[email protected]_runtime ad]$ a=1[[email protected]_runtime ad]$ (a=3;echo $a)3[[email protected]_runtime ad]$ echo $a1#括号中and的使用if [[ -n "$ret" && $ret -gt 123 ]]... #[[]]双中括号中只能使用&&,不能使用-aif [ -n "$ret" -a $ret -gt 123 ]... #[]单中括号中只能使用-a,不能使用&&if(($ret)) && (($ret >123 ))... #(())双小括号使用&& </li></code>
shell中函数的定义
<code>function getId(){ local url=$1 #local限定了变量url的作用域只在函数里面,不然会污染全局的作用域 ereg="http:\/\/www\.baidu\.com\/\([0-9]\+\)\.html" local ret=$(expr $url : $ereg) if [[ -n "$ret" && $ret -gt 0 ]]; then #当ret为null时使用[]会报错,-n这里的双引号一定要加上,不然当$ret为null时,一直返回真 echo $ret return 0 fi return 1}[[email protected]_runtime sh]$ echo $?0[[email protected]_runtime sh]$ getId "http://www.baidu.com/123.htl"[[email protected]_runtime sh]$ echo $?1[[email protected]_runtime sh]$ getId "http://www.baidu.com/123.html"123[[email protected]_runtime sh]$ echo $?0 </code>
函数的整体形式如上面的例子,这里面注意两点:
- 首先就是返回值,通过return的返回值只能是整数,并且在调用完成之后使用
echo $?
可以查看返回值。
- 要使用赋值的形式需要有
echo
,就像ret=$(getId "http://www.baidu.com.1234.html")
,只有echo
的值会传递给ret
变量。
杂项知识点
字符串转数组
<code>[[email protected]_runtime sh]$ str="燕睿涛 lulu yrt yanruitao"[[email protected]_runtime sh]$ arr=($str) #这一步将字符串转化为了数组[[email protected]_runtime sh]$ echo ${arr[*]}燕睿涛 lulu yrt yanruitao[[email protected]_runtime sh]$ echo ${#arr[@]}4</code>
常用判断标志
<code>[ -z STRING ] “STRING” 的长度为零则为真。 [ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。[ -d FILE ] 如果 FILE 存在且是一个目录则为真。[ -a FILE ] 如果 FILE 存在则为真。</code>
linux后台运行相关
<code>& #在一个命令的最后加上这个命令,可以将该命令放到后台执行./update.sh 100 500 &ctrl + z #讲一个正在前台执行的命令放到后台,并且处于暂停状态jobs #查看当前后台运行的命令jobs -l #可以显示所有后台任务的PID[[email protected]_runtime sh]$ jobs -l[1] 9681 Running ./t.sh 100 300 &[2] 9683 Running ./t.sh 100 300 &[3]- 9685 Running ./t.sh 100 300 &[4]+ 9688 Running ./t.sh 100 300 &fg #把后台中的命令调至前台继续运行,如果后台有多个命令可以使用`fg %jobnumber`将选中命令调出[[email protected]_runtime sh]$ jobs -l[2] 10033 Running ./t.sh 100 300 &[3] 10035 Running ./t.sh 100 300 &[4]- 10037 Running ./t.sh 100 300 &[5]+ 10039 Running ./t.sh 100 300 &[[email protected]_runtime sh]$ fg %2./t.sh 100 300 bg #讲一个在后台暂停的命令变成在后台继续执行。同样,如果有多个命令,可以使用bg %jobnumber[[email protected]_runtime sh]$ jobs -l[1]- 11655 Running ./t.sh 100 300 &[2]+ 11662 Running ./t.sh 100 300 &[[email protected]_runtime sh]$ fg %1./t.sh 100 300^Z[1]+ Stopped ./t.sh 100 300[[email protected]_runtime sh]$ jobs -l[1]+ 11655 Stopped ./t.sh 100 300[2]- 11662 Running ./t.sh 100 300 &[[email protected]_runtime sh]$ bg %1[1]+ ./t.sh 100 300 &[[email protected]_runtime sh]$ jobs -l[1]- 11655 Running ./t.sh 100 300 &[2]+ 11662 Running ./t.sh 100 300 &kill #终止进程kill %num #通过jobs查看的job号,进行杀死kill pid #通过进程号杀掉进程ctrl + C #终止当前前台的进程</code>
参考文献
- Bash Shell 里的各种括号
- shell中各种括号的作用()、(())、[]、[[]]、{}
- linux shell 数组建立及使用技巧
- shell脚本----if(数字条件,字符串条件,字符串为空)
- Shell for&while 循环详细总结
微信号: love_skills
越努力,越幸运!越幸运,越努力!
做上CEO不是梦
赢取白富美不是梦
屌丝逆袭不是梦
就是现在!!加油

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











電子メールの流れは次のとおりです: MUA: MailUserAgent - メール ユーザー エージェント。 (つまり、Outlook に似た電子メール ソフトウェア) MTA: MailTransferAgent - メール転送エージェント。NetEase、Sina などの電子メール サービス プロバイダーです。 MDA: MailDeliverAgent - メール配信エージェント。電子メール サービス プロバイダーのサーバー sender->MUA->MTA->MTA->if

DLL 欠落エラーは、Windows で発生することは非常にまれな問題ではありません。たとえば、Windows 11/10 で特定のソフトウェアを起動しようとすると、多くのユーザーが api-ms-win-crt-runtime-l1-1-0.dllismissing エラーを報告しています。このエラーでは、次のメッセージが表示されます。 api-ms-win-crt-runtime-l1-1-0.dll がコンピューターにないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。この問題を解決するには、プログラムを再インストールしてみてください。このエラーは、さまざまなゲーム、デザイン、画像編集ソフトウェアで発生する可能性があります。この問題により、ユーザーはプログラムを開いて使用することができなくなります。 api-m が見つかりません

golang を使用して開発する場合、多くの開発者はいくつかのエラーに遭遇しますが、その中でよくあるエラーは「未定義: runtime.GOMAXPROCS」です。このエラーは通常、Go 言語でマルチスレッド プログラミングを使用するときに発生します。最も一般的な状況は、次のコードを実行するときです: import "runtime" funcmain(){runtime.GOMAXPR

今日の急速な技術発展の時代では、雨後の筍のようにプログラミング言語が出現しています。多くの注目を集めている言語の 1 つは Go 言語です。Go 言語は、そのシンプルさ、効率性、同時実行の安全性などの機能により多くの開発者に愛されています。 Go 言語は、多くの優れたオープンソース プロジェクトがある強力なエコシステムで知られています。この記事では、厳選された 5 つの Go 言語オープンソース プロジェクトを紹介し、読者を Go 言語オープンソース プロジェクトの世界へ導きます。 KubernetesKubernetes は、自動化されたオープンソースのコンテナ オーケストレーション エンジンです。

Laravel は、拡張性と効率性に優れた人気の PHP フレームワークであり、開発者が高品質の Web アプリケーションを迅速に構築できる強力なツールとライブラリを多数提供しています。その中でも、LaravelEcho と Pusher は、WebSocket 通信を簡単に実装できる 2 つの非常に重要なツールであり、この記事では、Laravel アプリケーションでこれら 2 つのツールを使用する方法について詳しく説明します。 WebSocket とは何ですか? Webソケット

現在最も人気のある Go フレームワークは次のとおりです。 Gin: 軽量で高性能な Web フレームワークで、シンプルで使いやすいです。 Echo: 高性能のルーティングとミドルウェアを提供する、高速で高度にカスタマイズ可能な Web フレームワーク。 GorillaMux: 高度なルーティング構成オプションを提供する高速で柔軟なマルチプレクサー。 Fiber: 大量の同時リクエストを処理する、パフォーマンスが最適化された高性能 Web フレームワーク。 Martini: 豊富な機能セットを提供するオブジェクト指向設計のモジュール式 Web フレームワーク。

PHP における echo キーワードの役割と使用法の詳細な説明 PHP は、Web 開発で広く使用されているサーバーサイド スクリプト言語です。 echo キーワードは、PHP でコンテンツを出力するために使用されるメソッドです。この記事では、echoキーワードの機能と使い方を詳しく紹介します。機能: echo キーワードの主な機能は、コンテンツをブラウザに出力することです。 Web 開発では、フロントエンド ページにデータを動的に表示する必要がありますが、このとき、echo キーワードを使用してデータをページに出力できます。 e

「Go 言語開発の要点: 5 つの人気フレームワークの推奨事項」 高速で効率的なプログラミング言語として、Go 言語はますます多くの開発者に好まれています。開発効率を向上させ、コード構造を最適化するために、多くの開発者はフレームワークを使用してアプリケーションを迅速に構築することを選択します。 Go 言語の世界には、選択できる優れたフレームワークが数多くあります。この記事では、5 つの人気のある Go 言語フレームワークを紹介し、読者がこれらのフレームワークをよりよく理解して使用できるように、具体的なコード例を示します。 1.GinGin は高速な軽量 Web フレームワークです。
