【Linux#4】シェルスクリプトで変数への代入時に = の前後にスペースを入れてはいけない
概要
シェルスクリプトで変数への代入時に = の前後にスペースを入れてはいけない。
内容
変数に値を代入するときは、「変数名=値」の形式で書く。
「変数名 = 値」のように=の前後にスペースを入れると、=の前の文字列が変数ではなく、コマンドとして扱われてエラーになる。
hoge.sh
#!/bin/bash var='hoge' echo $var
ターミナル
$ ./hoge.sh hoge
=の前後にスペースを入れた場合
hoge.sh
#!/bin/bash var = 'hoge' echo $var
ターミナル
$ ./hoge.sh ./hoge.sh: 行 3: var: コマンドが見つかりません
「varというコマンドに=と'hoge'という引数を与えている」と解釈される。
【Linux#3】ls -lコマンドでサブディレクトリ含めてフルパスで出力する方法
概要
ls -lコマンドの出力結果をサブディレクトリ含めてフルパスで出力したい。
内容
方法
以下のように、コマンド置換を使用して、出力結果の詳細リストを表示することができる。
$ ll -d $(find tmp) drwxrwxr-x. 4 root root 92 2月 10 10:50 tmp drwxrwxr-x. 3 root root 18 2月 10 01:13 tmp/hoge -rwxrwxrwx. 1 root root 283 1月 24 23:06 tmp/my.sh -rw-rw-r--. 1 root root 43 1月 18 21:40 tmp/aaa.txt drwxrwxr-x. 4 root root 124 2月 10 02:10 tmp/test -rw-rw-r--. 2 root root 12 2月 10 00:28 tmp/test/bbb.txt
もしくは、
$ ll -d `find tmp`
参考記事
以下の記事がとても勉強になりました。
ls -lコマンドの結果をサブディレクトリ含めてフルパスで列挙したい #Linux - Qiita
シェルスクリプトのコマンド置換 #Linux - Qiita
【Linux#2】CentOSでyumエラーが出た場合の対処方法
概要
yumコマンドを実行した際、http://~ Not Foundのようなエラーが発生した場合の対処方法。
内容
エラー内容
$ yum list
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
http://mirror.centos.org/centos/7/extras/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。
To address this issue please refer to the below wiki article
https://wiki.centos.org/yum-errors
If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
One of the configured repositories failed (CentOS-7 - Extras),
and yum doesn't have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work "fix" this:
1. Contact the upstream for the repository and get them to fix the problem.
2. Reconfigure the baseurl/etc. for the repository, to point to a working
upstream. This is most often useful if you are using a newer
distribution release than is supported by the repository (and the
packages for the previous distribution release still work).
3. Run the command with the repository temporarily disabled
yum --disablerepo=extras ...
4. Disable the repository permanently, so yum won't use it by default. Yum
will then just ignore the repository until you permanently enable it
again or use --enablerepo for temporary usage:
yum-config-manager --disable extras
or
subscription-manager repos --disable=extras
5. Configure the failing repository to be skipped, if it is unavailable.
Note that yum will try to contact the repo. when it runs most commands,
so will have to try and fail each time (and thus. yum will be be much
slower). If it is a very temporary problem though, this is often a nice
compromise:
yum-config-manager --save --setopt=extras.skip_if_unavailable=true
failure: repodata/repomd.xml from extras: [Errno 256] No more mirrors to try.
http://mirror.centos.org/centos/7/extras/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
原因
サポート終了などの古いCentOSの場合に、データ取得先のURLが見つからないということ。
対処方法
以下のディレクトリにあるyumリポジトリの設定ファイルを開き、baseurlをvault.centos.orgに変更する。
vault.centos.orgは、サポート終了などによる過去のCentOSのパッケージを保管しているアーカイブサイト。
$ vi /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base #mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled = 0 skip_if_unavailable = 1 keepcache = 0 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yumのキャッシュをクリアしてから、再度yumコマンドを実行。
$ yum clean all
補足
yum info centos-releaseで、$releaseverや$basearchの値を確認できる。
$ yum info centos-release 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile インストール済みパッケージ 名前 : centos-release アーキテクチャー : x86_64 バージョン : 7 リリース : 9.2009.1.el7.centos 容量 : 44 k リポジトリー : installed 提供元リポジトリー : anaconda 要約 : CentOS Linux release file ライセンス : GPLv2 説明 : CentOS Linux release files 利用可能なパッケージ 名前 : centos-release アーキテクチャー : x86_64 バージョン : 7 リリース : 9.2009.2.el7.centos 容量 : 27 k リポジトリー : updates/7/x86_64 要約 : CentOS Linux release file ライセンス : GPLv2 説明 : CentOS Linux release files
【Python#11】f文字列(フォーマット済み文字列)の使い方
概要
f文字列を使用した書き方
内容
フォーマットf(書式指定)の方法には以下の3種類ある。
※ここでは各スタイルの細かいオプションは説明しない。
古いスタイル(format_string % data)
新しいスタイル({}とformat())
最新のスタイル(f文字列)
古いスタイル(format_string % data)
>>> cat = 'Chester' >>> weight = 28 >>> "Our cat %-12.3s weights %d pounds" % (cat, weight) 'Our cat Che weights 28 pounds'
右寄せとか文字数上限は書式指定文字列で指定する。
新しいスタイル({}とformat())
>>> cat = 'Chester' >>> weight = 28 >>> 'Our cat {1:<10d} weights {0:^10s} pounds'.format(cat, weight) 'Our cat 28 weights Chester pounds'
{n}で何番目の引数を使用するか指定ができる。 右寄せとか文字数上限は{}の中で:に続けて指定する。
最新のスタイル(f文字列)
>>> cat = 'Chester' >>> weight = 28 >>> f'Our cat {cat:>20} weights {weight:^10} pounds' 'Our cat Chester weights 28 pounds'
format()の中でやっていたことをメインの書式指定文字列の{}の中でできる。
【Python#10】inによる多重比較
概要
in演算子を使用した書き方
内容
以下のような長いif文を
>>> letter = 'o' >>> if letter == 'a' or letter == 'e' or letter =='t' \ ... or letter == 'o' or letter == 'u': ... print(letter, 'is a vowel') ... else: ... print(letter, 'is not a vowel') ... o is a vowel
in演算子を使用して、以下のように記述することできる。
>>> vowels = 'aeiou' >>> letter = 'o' >>> letter in vowels True >>> if letter in vowels: ... print(letter, 'is a vowel') ... o is a vowel
各種データ型に対するinの使い方
>>> letter = 'o' >>> >>> # 配列 >>> vowel_set = {'a', 'e', 'i', 'o', 'u'} >>> letter in vowel_set True >>> # リスト >>> vowel_list = ['a', 'e', 'i', 'o', 'u'] >>> letter in vowel_list True >>> # タプル >>> vowel_tuple = ('a', 'e', 'i', 'o', 'u') >>> letter in vowel_tuple True >>> # 辞書 >>> vowel_dict = {'a':'apple', 'e':'elephant', ... 'i':'impala', 'o':'ocelot', 'u':'unicorn'} >>> letter in vowel_dict True >>> # 文字列 >>> vowel_string = "aeiou" >>> letter in vowel_string True
【Python#8】切り捨ての整数除算(//)
概要
切り捨ての整数除算について
内容
除算には2種類ある。
/による浮動小数点数(10進)除算
//による整数(切り捨て)除算
/による浮動小数点数(10進)除算
整数を整数で割るときに、/を使用すると、結果は浮動小数点数で返される。
>>> 9 / 5 1.8
//による整数(切り捨て)除算
切り捨ての整数除算は整数の結果を返し、剰余は捨てられる。
>>> 9 // 5 1
どちらも、ゼロ除算した場合は、Python例外が発生する。
>>> 5 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero # 0による除算 >>> 7 // 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero # 0による整数除算または剰余