第II章で定義されているシェル変数

1.シェル変数の概要

1.何が変数であります

、固定されていないコンテンツを表すために、固定文字列を使用して、後続の参照を容易にするために:変数は、簡単に理解するためにデータシェルを送信する方法です。

2. VARIABLEコマンド仕様

変数名は、要件定義されている場合:文字、数字、いくつかのコンポーネントを強調し、文字で開始しようとし、最良の変数名は、いくつかの意味を持ちます。

ip=10.0.0.100

ip1=10.0.0.100

Hostname_Ip=10.0.0.100

hostname_IP=10.0.0.100

等号は、代入、ノートです:変数の定義が続く等号の両側にはスペースは、システムコマンドと競合しません。

3.シェル変数定義された方法

01)ユーザー定義変数:変数名が人為的に定義されました。

02)システム環境変数:システム動作しており、環境関連データを保存します。

03)Locationパラメータ変数は:スクリプトのパラメータの受け渡しを行うために、変数名は、変数効果が固定されており、カスタマイズすることができません。

04)あらかじめ定義された変数:バッシュが既に変数を定義し、変数名は、変数効果が固定され、カスタマイズすることができません。

4.変数定義シェル実践
01の例示的なユーザー定義変数は、現在のアクティブシェル

#1.定义变量,变量名=变量值。不能出现"-横岗"命令
#定义变量有空格时,必须使用引号
[root@cc ~]# cc="hello shell"     

#2.引用变量,$变量名 或 ${变量名}
[root@cc ~]# echo $cc
hello shell
[root@cc ~]# echo $cc_test

[root@cc ~]# echo ${cc}_test
hello shell_test

#3.查看变量,set显示所有变量,包括自定义变量和环境变量
[root@cc ~]# set |grep cc
HOSTNAME=cc
cc='hello shell'

#只显示系统的环境变量
[root@cc ~]# env|grep cc        
HOSTNAME=cc

#4.取消变量,作用范围:仅在当前Shell中有效。
[root@cc ~]# unset cc
[root@cc ~]# set |grep cc
HOSTNAME=cc

#5.注意事项,引用变量时注意事项,单双引号和不加引号的区别。
[root@cc ~]# var=$(hostname)
[root@cc ~]# echo $var
cc
[root@cc ~]# var="$(hostname)"
[root@cc ~]# echo $var
cc
[root@cc ~]# var='$(hostname)'
[root@cc ~]# echo $var
$(hostname)
[root@cc ~]# echo "$var"
$(hostname)
[root@cc ~]# echo '$var'
$var
[root@cc ~]# name=cc
[root@cc ~]# echo $name
cc
[root@cc ~]# echo $name money is $10000000000
cc money is 0000000000
[root@cc ~]# echo "$name money is $10000000000"
cc money is 0000000000
[root@cc ~]# echo '$name money is $10000000000'
$name money is $10000000000
[root@cc ~]# echo $name money is \$10000000000
cc money is $10000000000
[root@cc ~]# echo "$name money is \$10000000000"
cc money is $10000000000
[root@cc ~]# echo '$name money is \$10000000000'
$name money is \$10000000000
[root@cc ~]# echo $name money is '$10000000000'
cc money is $10000000000

要約:
単一引用符#のWYSIWYGは、何を、そのまま出力吐き出すものを食べます。
$ $() ``:単一引用符で#二重引用符は同様に、特殊記号は(ランニング)解決される
スペースが全体としてカウントされていない場合は、同様の引用符と二重引用符#なしに。
コマンド内の抗引用符の#バッククォート最初の実装は、結果の実装が表示さ。

02.実施例環境変数システム、実効電流シェルシェルとサブコンビネーション

#1.定义环境变量:export 变量,将自定义变量转换成环境变量。
[root@cc ~]# echo $name
cc
[root@cc ~]# cat test.sh
#!bin/bash
echo $name
#执行脚本时,会调用另一个bash执行,就访问不到$name的值。
[root@cc ~]# sh test.sh    

#将变量转换为环境变量
[root@cc ~]# export name=cc 
#再次执行脚本
[root@cc ~]# sh test.sh                
cc

#注意:
使用export可以在当前用户的所有环境生效。
将export定义变量写入/etc/bashrc,对所有用户永久生效。
将exprot定义变量写入.bashrc,只对该用户永久生效。

#2.使用系统已定义好的环境变量
[root@cc ~]# cat env.sh
#!/bin/bash
echo "用户的家目录: $HOME"
echo "当前主机名是: $HOSTNAME"
echo "当前所在目录: $PWD"
echo "当前连接服务器使用的地址和端口是: $SSH_CONNECTION"

[root@cc ~]# sh env.sh
用户的家目录: /root
当前主机名是: cc
当前所在目录: /root
当前连接服务器使用的地址和端口是: 10.0.0.1 62881 10.0.0.98 22

実施例03.可変パラメータ定義済み変数システムは、方法を使用して構築されました。

1.次のようにスクリプトは次のとおりです。

#!/bin/bash
echo "#当前shell脚本的文件名: $0"
echo "#第1个shell脚本位置参数:$1"
echo "#第2个shell脚本位置参数:$2"
echo "#第3个shell脚本位置参数:$3"
echo "#所有传递的位置参数是: $*"
echo "#所有传递的位置参数是: $@"
echo "#总共传递的参数个数是: $#"
echo "#当前程序运行的 PID 是: $$"
echo "#上一个命令执行的返回结果: $?"

2.以下の結果を実行します。

[root@cc ~]# sh variable.sh linux python mysql
#当前shell脚本的文件名: variable.sh
#第1个shell脚本位置参数:linux
#第2个shell脚本位置参数:python
#第3个shell脚本位置参数:mysql
#所有传递的位置参数是: linux python mysql
#所有传递的位置参数是: linux python mysql
#总共传递的参数个数是: 3
#当前程序运行的 PID 是: 25285
#上一个命令执行的返回结果: 0

3.なお、\(*と\)との違い@

あなたが引用符なしで見ることができた後、両方が引用符で受信したパラメータに戻りますが、

$は、*全体(単一の文字列)などのパラメータ文字列を返す
文字列が返された各パラメータに$ @を

#测试脚本如下:
[root@cc ~]# cat test.sh
#!/bin/bash
test() {
echo "未加引号,二者相同"
echo $*
echo $@
echo "加入引号后对比"
for N in "$*"
do
echo $N
done

echo "----------"
for N in "$@"
do
echo $N
done
}
test 123 456 789

#执行结果如下:
[root@cc ~]# sh test.sh
未加引号,二者相同
123 456 789
123 456 789

加入引号后对比
123 456 789
----------
123
456
789

04.どのようなポジション?スクリプトを実行する場合、スクリプト・コンテンツは、背中に書かれた空間によって分離されています。

[root@cc ~]# /etc/init.d/network
Usage: /etc/init.d/network {start|stop|status|restart|force-reload}

#status就算第一个位置参数 $1其它位置变量:$2..$9 ${10}
[root@cc ~]# /etc/init.d/network status    

05.追加:コマンド変数に結果を渡します。(コマンド置換)

#根据系统时间,打印今年时间和明年时间
[root@cc ~]# echo "This is $(date +%Y) year"
This is 2019 year
[root@cc ~]# echo "This is $(($(date +%Y)+1)) year"
This is 2020 year

#自定义变量运算
[root@cc ~]# age=18
[root@cc ~]# echo $age
18
[root@cc ~]# echo $(($age+1))
19

#命令的嵌套使用,使用$($())
[root@cc ~]# mkdir oldboy
[root@cc ~]# touch oldboy/{1..5}.txt
[root@cc ~]# data=$(tar zcvf oldboy.tar.gz $(find /root/oldboy/ -name "*.txt"))
tar: Removing leading `/' from member names
[root@cc ~]# echo $data
/root/oldboy/1.txt /root/oldboy/2.txt /root/oldboy/3.txt /root/oldboy/4.txt /root/oldboy/5.txt

2.シェル変数の代入

カスタム変数、および組み込み変数システムに加えて、リードコマンドが対話的に変数が渡され使用することができます

01.read例の構文

#示例脚本:
[root@cc ~/shell]# cat read1.sh
#!/bin/bash
read -p "提示信息:" var
echo "你输入的变量是: $var "

#执行脚本
[root@cc ~/shell]# sh read1.sh
提示信息:oldboy
你输入的变量是: oldboy

02.read例の構文、簡単なバックアップシーン

#示例脚本:
[root@cc ~/shell]# cat read2.sh
#!/bin/bash
read -p "你要备份的目录是:" back
echo "你要备份的目录是: $back "
echo "-------------backuping $back ---------------"
echo "-------------backup done $back -------------"

#执行脚本
[root@cc ~/shell]# sh read2.sh
你要备份的目录是:/data
你要备份的目录是: /data
-------------backuping /data ---------------
-------------backup done /data -------------

03はIPを介してユーザ入力かどうかをテスト、構文の例を読ん

スクリプトが実行されると、1):IPアドレスを入力してください。
2)利用者のIPを介して入力するかどうかを検出するために、pingコマンドを使用します。
一般的に生還した場合3)、そうでない場合は一般に戻すことに失敗しました。

#示例脚本:
[root@cc ~/shell]# cat read3.sh
#!/bin/bash
#1.提示用户输入一个IP地址
read -p "请输入需要检测的IP地址: " IP
#2.使用ping命令检测IP地址是否通讯
ping -W1 -c1 $IP &>/dev/null
rc=$?
#3.检查上一次命令执行返回的状态码是否正常
if [ $rc -eq 0 ];then
    echo "$IP 能正常通信"
else
    echo "$IP 无法正常通信"
fi

#执行脚本
[root@cc ~/shell]# sh read3.sh
请输入需要检测的IP地址: 223.5.5.5
223.5.5.5 能正常通信

[root@cc ~/shell]# sh read3.sh
请输入需要检测的IP地址: 233.5.5.5
233.5.5.5 无法正常通信
#echo命令输出颜色。
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

[root@cc ~/shell]# cat read3.sh
#!/bin/bash
#1.提示用户输入一个IP地址
read -p "请输入需要检测的IP地址: " IP
#2.使用ping命令检测IP地址是否通讯
ping -W1 -c1 $IP &>/dev/null
rc=$?
#3.检查上一次命令执行返回的状态码是否正常
if [ $rc -eq 0 ];then
    echo -e "\033[32m $IP 能正常通信 \033[0m"
else
    echo -e "\033[31m $IP 无法正常通信 \033[0m"
fi

[root@cc ~/shell]# sh read3.sh
请输入需要检测的IP地址: 223.5.5.5
223.5.5.5 能正常通信
[root@cc ~/shell]# sh read3.sh
请输入需要检测的IP地址: 233.5.5.5
233.5.5.5 无法正常通信

04.ホスト名を変更するためのスクリプトを記述するために、リードコマンドを使用します

1)ホスト名を入力するようユーザーに促します。
2)実際にこの操作した場合、ユーザーに要求します。
3)実際に実行します。

#示例脚本
[root@cc ~/shell]# cat read4.sh
#!/bin/bash
#1.提示用户输入新的主机名称,然后打印新的主机名称
read -p "请输入你想修改的主机名称: " HostName
echo "你将要修改的主机名称为: $HostName"
#2.是否确认修改,如果确认则真的执行shell命令,如果不确认则退出
read -p "你确定真的要修改如下内容吗[Y|N]? " readly
#3.判断用户输入的是Y还是N,如果是Y则真的执行,如果是其他则退出
if [ $readly == "Y" ];then
    hostnamectl set-hostname $HostName && bash
else
    exit
fi

#执行脚本
[root@cc ~/shell]# sh read4.sh
请输入你想修改的主机名称: web
你将要修改的主机名称为: web
你确定真的要修改如下内容吗[Y|N]? N

[root@cc ~/shell]# sh read4.sh
请输入你想修改的主机名称: web
你将要修改的主机名称为: web
你确定真的要修改如下内容吗[Y|N]? Y
[root@web ~/shell]#

05.は、IPアドレスを変更するためのスクリプトを記述するために、リードコマンドを使用します

1)新しいIPアドレスのホストビットの入力を求めるメッセージが表示されます。
確かに、この操作場合2)ユーザーに尋ねる。
3)実際に実行します。

#示例脚本:
[root@cc ~/shell]# cat read5.sh
#!/bin/bash
#1.提示用户输入新的ip地址主机位,然后打印新的ip地址主机位
read -p "请输入你想修改的新的ip地址主机位: " IP
echo "你将要修改的新的ip地址主机位为: $IP"
#2.是否确认修改,如果确认则真的执行shell命令,如果不确认则退出
read -p "你确定真的要修改如下内容吗[Y|N]? " readly
#3.判断用户输入的是Y还是N,如果是Y则真的执行,如果是其他则退出
if [ $readly == "Y" ];then
oldip=`ifconfig eth0 |awk -F '[ .]+' 'NR==2{print $6}'`
sed -i "s#${oldip}#${IP}#g" /etc/sysconfig/network-scripts/ifcfg-eth[01] && \
    systemctl restart network
else
exit
fi

#执行脚本
[root@cc ~/shell]# sh read5.sh
请输入你想修改的新的ip地址主机位: 90
你将要修改的新的ip地址主机位为: 90
你确定真的要修改如下内容吗[Y|N]? Y

#卡住,重新连接新的IP地址进行连接登录。

3.シェル変数置換

変数 説明
#1 $ {変数} 可変長の値を取得します。
マッチングルール#1 $ {変数} スクラッチ試合、最短削除
$ {変数}マッチングルール## スクラッチ一致、最長の削除
$ {変数}マッチングルール% 最初から最後の試合、削除最短
%% $ {変数}マッチングルール 最初から最後の試合、削除最長
$ {変数/古い文字列/新しい文字列} 新しい文字列変数に古い文字列を置き換え、最初の置き換え
$ {String変数//古い/新しい文字列} 新しい文字列変数で古い文字列を置き換え、すべて置き換え
$ {変数:マッチ:マッチングルール} インデックスとスライスしました

01.前後に変数の内容を削除します。

#定义变量
[root@cc ~/shell]# url=www.sina.com.cn 

#输出变量的值
[root@cc ~/shell]# echo ${url}     
www.sina.com.cn

#从前往后,最短匹配
[root@cc ~/shell]# echo ${url#*.}         
sina.com.cn

#从前往后,最长匹配
[root@cc ~/shell]# echo ${url##*.}         
cn

02.前方からの変数の内容を削除します。

#定义变量
[root@cc ~]# url=www.sina.com.cn             

#输出变量结果
[root@cc ~]# echo ${url}             
www.sina.com.cn

#从后往前,最短匹配
[root@cc ~]# echo ${url%.*}             
www.sina.com

#从后往前,最长匹配
[root@cc ~]# echo ${url%%.*}             
贪婪匹配
www

03.変数の内容を交換してください

[root@cc shell01]# echo ${url}                
www.sina.com.cn
[root@cc shell01]# echo ${url/n/N}            
www.siNa.com.cn
[root@cc shell01]# echo ${url//n/N}        
www.siNa.com.cN

04.インデックスとスライスしました

#从0列开始,切出5列,第0-4列
[root@cc ~/shell]# echo ${url:0:5}            
www.s

#从5列开始,切出5列,第5-9列
[root@cc ~/shell]# echo ${url:5:5}            
ina.c

#去除前5列
[root@cc ~/shell]# echo ${url:5}            
ina.com.cn

05.練習シーンは:使用量がアラームメールの80%を超えた場合、現在のメモリ使用状況を見ます

1.メモリ#free -m表示する方法
無料-mの#/合計* 100 =パーセントの使用によって使用されるメモリの割合を表示する方法2. |のawk '/ ^ Memのは、 / {$ 3 / $ 2 * 100を印刷します}'

#示例脚本
[root@cc ~/shell]# cat mem_used.sh
#!/bin/bash
# 监控内存使用百分比,超过百分之80则报警
free_use=$(free -m|awk '/^Mem/ {print $3/$2*100}')
if [ ${free_use%.*} -gt 80 ];then
    echo "你的内存超过了百分之80,当前是${free_use}%"
else
    echo "你的内存正常使用,当前是${free_use}%"
fi

#执行脚本
[root@cc ~/shell]# sh mem_used.sh
你的内存正常使用,当前是9.0535%

06.練習シーン2:毎月1日とに保存されている2019-06-20_etc.tar.gzの形で保存/ルート/ BAKディレクトリ、スクリプト名のfileback、に格納されているすべてのコンテンツのバックアップ圧縮/ etcディレクトリ、 / rootのホームディレクトリの下に。

01)どのようなバックアップ?

02)ここで、バックアップ?

03)を使用するどのような方法?

04)バックアップ・サイクル?

#脚本如下:
[root@cc ~/shell]# cat fileback.sh
#!/usr/bin/bash
DestPath=/root/bak
Date=$(date +%F)
#1.准备目标位置
[ ! -d $DestPath ] && mkdir -p $DestPath
#2.备份到目标位置
tar czf $DestPath/${Date}_etc.tar.gz /etc
[root@cc ~/shell]# sh fileback.sh

#执行脚本:
[root@cc ~/shell]# sh fileback.sh
tar: Removing leading `/' from member names

#查看结果
[root@cc ~/shell]# ll /root/bak/2019-06-25_etc.tar.gz
-rw-r--r-- 1 root root 10229422 Jun 25 17:15 /root/bak/2019-06-25_etc.tar.gz

07.シーンの練習3:/バックアップディレクトリの下に.txt拡張子を持つすべてのファイルを見つけるために、中/バックアップ10個の.txtファイルを作成します。

txt.bakへ1)一括編集TXT

2)すべての.bakファイルが圧縮パッケージ化されてい123.tar.gz

3)バッチファイルの名前を復元し、その後増加.BAKを削除

方法一:
[root@cc ~/shell]# cat mv.sh
#!/usr/bin/bash
#1.改名
find /backup -iname "*.txt"|sed -r 's#(.*)#mv \1 \1.bak#g'|bash
#2.打包
tar czf /backup/123.tar.gz $(find /backup -iname "*.bak")
#3.还原
find /backup -iname "*.bak"|sed -r 's#(.*).bak#mv \1.bak \1#g'|bash

方法二:
[root@cc ~/shell]# cat rename.sh
#!/bin/bash
#定义变量
T=txt
B=bak

#把backup目录下.txt结尾的文件修改成txt.bak
cd /backup && rename $T $T\.$B *.txt
#把所有的.bak结尾的文件打包压缩为123.tar.gz
tar zcvf /backup/123.tar.gz /backup/*.bak
#还原文件的名字
rename $T\.$B $T *

方法三:
[root@cc ~/shell]# cat for_name.sh
#!/usr/bin/bash
File_txt=$(find /backup/ -type f -iname "*.txt"|xargs >/backup/txt.tt)
for i in $(cat /backup/txt.tt)
do
mv $i $i.bak
done
tar czf /backup/123.tar.gz ./*.bak
File_bak=$(find /backup/ -type f -iname "*.bak" >/backup/tar.tt)
for j in $(cat /backup/tar.tt)
do
mv $j ${j%.*}
done 

08.練習の4つのシナリオ:次の文字列の語長を削除するには3未満である、私は18だqiuzengjia教師です。

方法一:
for循环方式
[root@cc ~/shell]# cat for.sh
#!/bin/sh
for i in I am qiuzengjia teacher I am 18
do
    [ ${#i} -lt 3 ] && echo $i
done

方法二:
awk方式
[root@web01 scripts]# echo I am qiuzengjia teacher I am 18|xargs -n1|awk '{if(length<3)print}'
I
am
I
am
18

4.シェル変数の計算

01.整数演算、exprは、\((())\) []、小数演算をサポートしていません

演算子 意味
NUM1 + NUM2 プラス需要
NUM1 - num2の あまり需要
* NUM1のNUM2 直交
NUM1 / NUM2
num1をnum2の% 余り

#変数使用式exprを定義し、\((())、\) []、聞かせて数学について。exprはスペースで区切らなければなりません。

#expr
[root@cc ~/shell]# num1=20
[root@cc ~/shell]# num2=10
[root@cc ~/shell]# expr $num1 + $num2
30
[root@cc ~/shell]# expr $num1 - $num2
10
[root@cc ~/shell]# expr $num1 * $num2
expr: syntax error
[root@cc ~/shell]# expr $num1 \* $num2
200
[root@cc ~/shell]# expr $num1 / $num2
2
[root@cc ~/shell]# expr $num1 % $num2
0
#$(0)
[root@cc ~/shell]# echo $(( $num1 + $num2 ))
30
[root@cc ~/shell]# echo $(( $num1 - $num2 ))
10
[root@cc ~/shell]# echo $(( $num1 * $num2 ))
200
[root@cc ~/shell]# echo $(( $num1 / $num2 ))
2
[root@cc ~/shell]# echo $(( $num1 % $num2 ))
0
#$[]
[root@cc ~/shell]# echo $[ $num1 + $num2 ]
30
[root@cc ~/shell]# echo $[ $num1 - $num2 ]
10
[root@cc ~/shell]# echo $[ $num1 * $num2 ]
200
[root@cc ~/shell]# echo $[ $num1 / $num2 ]
2
[root@cc ~/shell]# echo $[ $num1 % $num2 ]
0
#let
[root@cc /scripts]# a=1
[root@cc /scripts]# let a++
[root@cc /scripts]# echo $a
2
[root@cc /scripts]# let a++
[root@cc /scripts]# echo $a
3
[root@cc /scripts]# let a--
[root@cc /scripts]# echo $a
2

02.小数演算BC、AWK、パイソン

#需要下载此命令
[root@cc ~/shell]# yum install bc -y

[root@cc ~/shell]# num1=10
[root@cc ~/shell]# num2=20
[root@cc ~/shell]# echo $num1+$num2 |bc
30
[root@cc ~/shell]# echo $num1-$num2 |bc
-10
[root@cc ~/shell]# echo $num1*$num2 |bc
200
[root@cc ~/shell]# echo $num1/$num2 |bc
0
[root@cc ~/shell]# echo "scale=2;$num1/$num2" |bc
.50
[root@cc ~/shell]# echo $num1^$num2 |bc
100000000000000000000
[root@cc ~/shell]# echo $num1%$num2 |bc
10
#awk
[root@cc ~/shell]# awk "BEGIN{print $num1 + $num2 }"
30
[root@cc ~/shell]# awk "BEGIN{print $num1 / $num2 }"
0.5
[root@cc ~/shell]# awk "BEGIN{print $num1 - $num2 }"
-10
[root@cc ~/shell]# awk "BEGIN{print $num1 * $num2 }"
200
[root@cc ~/shell]# awk "BEGIN{print $num1 / $num2 }"
0.5
[root@cc ~/shell]# awk 'BEGIN{printf "%.2f\n",1/2}'
0.50
[root@cc ~/shell]# awk "BEGIN{print $num1 ^ $num2 }"
100000000000000000000
[root@cc ~/shell]# awk "BEGIN{print $num1 % $num2 }"
10
#Python
[root@cc ~/shell]# echo "print $num1+$num2" |python
30
[root@cc ~/shell]# echo "print $num1-$num2" |python
-10
[root@cc ~/shell]# echo "print $num1*$num2" |python
200
[root@cc ~/shell]# echo "print $num1/$num2" |python
0
[root@cc ~/shell]# echo "print ${num1}.0/$num2" |python
0.5
[root@cc ~/shell]# echo "print $num1%$num2" |python
10

03.変数の操作ケース
ケース1:PSのAXUにVSZ列を検索し、

[root@cc ~/shell]# ps axuf|awk '{print $5}'|grep -v VSZ|tr "\n" "+" |sed -r 's#(.*)\+#\1\n#g' |bc
16506888

ケース2:数学電卓を作ります

例えば:
最初の番号10を入力し
第二桁20は、入力
10 + 20 = 30の結果を示します

[root@cc ~/shell]# cat count.sh
#!/bin/bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2
echo "$num1+$num2=$[$num1+$num2]"
echo "$num1-$num2=$[$num1-$num2]"
echo "$num1*$num2=$[$num1*$num2]"
echo "$num1/$num2=$[$num1/$num2]"

5.シェルケース変数

01.使用するシェルスクリプトのプリント、システムのバージョン、カーネルバージョンのプラットフォーム、仮想プラットフォーム、静的ホスト名、eth0のネットワークカードのIPアドレス、LO LAN IPアドレス、現在の外部ホストのIPアドレスカールicanhazip.com

#示例脚本如下:
[root@cc ~/shell]# sh status.sh
#!/usr/bin/bash
System=$(hostnamectl |grep System|awk '{print $3,$4,$5}')
Kernel=$(hostnamectl|grep Kernel|awk -F: '{print $2}')
Vt=$(hostnamectl|grep Virtualization|awk '{print $2}')
Statichostname=$(hostnamectl|grep "Static hostname"|awk '{print $3}')
Eth0=$(ifconfig eth0|awk 'NR==2{print $2}')
Lo=$(ifconfig lo|awk 'NR==2{print $2}')
Network_T=$(curl -s icanhazip.com)

echo "当前系统版本是: $System"
echo "当前系统内核是: $Kernel"
echo "当前虚拟平台是: $Vt"
echo "当前静态主机名是: $Statichostname"
echo "当前Eth0IP地址是: $Eth0"
echo "当前lo地址是: $Lo"
echo "当前外网地址是: $Network_T"

#执行脚本
[root@cc ~/shell]# sh status.sh
当前系统版本是: CentOS Linux 7
当前系统内核是: Linux 3.10.0-957.el7.x86_64
当前虚拟平台是: vmware
当前静态主机名是: cc
当前Eth0IP地址是: 10.0.0.90
当前lo地址是: 127.0.0.1
当前外网地址是: 139.226.173.12

要件の02.説明:文字列変数=、スクリプトを実行した後、印刷出力文字列変数「BigdataプロセスはHadoopのある、Hadoopのは、オープンソースプロジェクトである」、とユーザーに次のオプションを提供します:

デマンド#
1)印字文字列の長さ
2)文字列のHadoopの全削除
3)Linux用の最初のHadoop置き換える
4)Linux用のすべてのHadoopを置き換える
デジタル加入者1入力| 2 | 3 | 4は、対応する項目の機能を実行することができます。

#脚本如下:
[root@cc ~/shell]# cat variable.sh
#!/usr/bin/bash
string="Bigdata process is Hadoop, Hadoop is open source project"
echo $string
cat <<EOF
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
EOF

read -p "请输入数字1|2|3|4: " var

if [ $var -eq 1 ];then
    echo 当前string变量的长度是: ${#string}
    #echo 当前string变量的长度是: echo ${string}|wc -L    
fi

if [ $var -eq 2 ];then
    echo ${string//Hadoop/}
fi

if [ $var -eq 3 ];then
    echo ${string/Hadoop/Linux}
fi

if [ $var -eq 4 ];then
    echo ${string//Hadoop/Linux}
fi

#执行脚本
[root@cc ~/shell]# sh variable.sh
Bigdata process is Hadoop, Hadoop is open source project
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
请输入数字1|2|3|4,或q|Q: 1
当前string变量的长度是: 57
[root@cc ~/shell]# sh variable.sh
Bigdata process is Hadoop, Hadoop is open source project
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
请输入数字1|2|3|4,或q|Q: 2
Bigdata process is , is open source project

[root@cc ~/shell]# sh variable.sh
Bigdata process is Hadoop, Hadoop is open source project
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
请输入数字1|2|3|4,或q|Q: 3
Bigdata process is Linux, Hadoop is open source project

[root@cc ~/shell]# sh variable.sh
Bigdata process is Hadoop, Hadoop is open source project
1)、打印string长度
2)、删除字符串中所有的Hadoop
3)、替换第一个Hadoop为Linux
4)、替换全部Hadoop为Linux
请输入数字1|2|3|4,或q|Q: 4
Bigdata process is Linux, Linux is open source project

おすすめ

転載: www.cnblogs.com/chenmiao531759321/p/11724034.html