English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linuxで変数を定義するスクリプトを共有する

この記事では、Linuxで変数を定義するスクリプトの例を共有し、皆様に参考にしていただくために、以下の内容を説明します。

基本的に同じ内容の二つのスクリプトがありますが、変数が変わっているだけで、他は一切変更されていません。しかし、実行中に異なる結果が発生しました。

コード1:

vi back.sh
#backup import file,such as /etc/rc.local /var/spool/cron/root
IP=$(ifconfig eth1|sed -nr '2s#.*addr:(.*) B.*#\1#gp')
Path=/backup
if [ $(date +%w) -eq 0 ]
then
  Time=$(date +%F-%w -d "-1 day")
else
  Time=$(date +%F "-1 day")
fi
mkdir $Path/$IP -p
cd / &&\
tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
rsync -azv $Path/ [email protected]::backup --password-file=/etc/rsyncd.password &&\
find $Path/ -type f \( -name "*.log" -o -name "*.tar.gz" \) -mtime +7 |xargs rm –f
"back.sh" 15L, 628C written

コード2:

vi back.sh
#backup import file,such as /etc/rc.local /var/spool/cron/root
IP=$(ifconfig eth1|sed -nr '2s#.*addr:(.*) B.*#\1#gp')
Path=/backup
if [ $(date +%w) -eq 0 ]
then
  Time=$(date +%F-%w -d "-1 day")
else
  Time=$(date +%F "-1 day")
fi
mkdir $Path/$IP -p
cd / &&\
tar zcfh /backup/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
rsync -azv $Path/ [email protected]::backup --password-file=/etc/rsyncd.password &&\
find $Path/ -type f \( -name "*.log" -o -name "*.tar.gz" \) -mtime +7 |xargs rm –f
"back.sh" 15L, 628C written

上記のコードはパッケージ化の状況を変更しただけで、tar zcf /backupと変数tar $Path/結果が異なる状況が発生しました。最初の実行結果は以下の通りです:

コード1の実行結果:

[root@nfs01 backup]# ls
172.16.1.31 backup_2017-12-23-6.tar.gz flag_2017-12-23-6.log

コード2の実行結果:

[root@nfs01 backup]# ls
172.16.1.31

コード1とコード2の原理は同じですが、なぜ実行結果が異なるのでしょうか?個人的には環境変数のディレクトリの先頭が原因だと思います。これにより、前の環境変数が無効化されました。二度にパッケージ化しました:

テストスクリプト

[root@nfs01 scripts]# sh -x back.sh 
++ sed -nr '2s#.*addr:(.*) B.*#\1#gp'
++ ifconfig eth1
+ IP=172.16.1.31
+ Path=/backup
++ date +%w
+ '[' 4 -eq 0 ']'
++ date +%F -d '-1 day'
+ Time=2017-12-20
+ mkdir /backup/172.16.1.31 -p
+ cd /
+ tar zcfh /backup/172.16.1.31/backup_2017-12-20.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs
+ md5sum /backup/172.16.1.31/backup_2017-12-20.tar.gz
+ rsync -azv /backup/ [email protected]::backup --password-file=/etc/rsyncd.password
sending incremental file list
172.16.1.31/backup_2017-12-20.tar.gz
172.16.1.31/flag_2017-12-20.log
sent 1128 bytes received 65 bytes 2386.00 bytes/sec
total size is 2960 speedup is 2.48
+ xargs rm -f
+ find /backup/ -type f '(' -name '*.log' -o -name '*.tar.gz' ')' -mtime +7

テストスクリプトには問題はありませんが、原因がわかりません。神様が解答していただけると助かります!どうもありがとうございます。

 これでこの記事のすべての内容が終わります。皆様の学習に役立つことを願っています。また、ナイアラ教程を多くのサポートをいただけると嬉しいです。

声明:この記事の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、自己でアップロードされています。このサイトは所有権を持ちません。人工的な編集は行われていません。また、関連する法的責任を負いません。著作権に抵触する内容がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際には、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がついたら、このサイトは侵害を疑う内容をすぐに削除します。)

おすすめ