スクリプトメモ

スクリプトメモ

bash コマンドは日経Linux のコマンド一覧に
載っていないので検索

http://kazmax.zpp.jp/cmd/b/bash.1.html
によれば

1
bash -e


コマンドが0以外の終了ステータス
つまりエラーがあれば終了するようになる

これは処理の最後に

1
rm -Rf “./$dir

として
$dir がからのままここに来ないようにする

ただし -e オプションは途中で以上終了しても
止まってくれない

1
2
3
4
5
6
7
8
9
#!/bin/bash
 
false| true
 
echo "止まらない"
 
true| false
 
echo “止まる"

というファイルを実行すれば結果がわかる

1
2
止まらない
止まる

というように結果として止まらない

なので bash -e を信用しないこと

PIPESTATE などで判断するといい

次に exec コマンド

【 exec 】 現行のジョブに置き換えてコマンドを続行する

を参考にするといい

これは標準エラーを捨てるのにも使われる

1
exec 2> /dev/null

とすれば /dev/null
に出力され消えることになる

主な書式は
exec2 > file
とすれば
以後のシェルスクリプトのエラー出力を
file に書き出す
というようになる

書籍にある

1
exec2 > ./$(basename $0).$(date + %Y%m%d%H%M%S).log

とすれば
実行ファイル名.日付.log
というファイル名になる

bash のオプションに
xvとあるけど
どっちもログを標準エラー出力にする
違いは
bash – コマンド (プログラム) の説明 – Linux コマンド集 一覧表
を参考に
$(basename $0)
はシェルスクリプトの名前
試しに

1
vim test.bash

で作成

1
2
3
4
5
6
7
#!/bin/bash
 
 
basename "$0"
 
 
echo $0

実行するとわかるけど
echo との違いはパスを含まず
ファイル名だけ表示されること
結果は

1
2
3
test.bash
 
/home/vagrant/test.bash

というようになる
判定で、それぞれ変数dir に日付が入っているか
そして
本日付の圧縮ファイルがあるかを調べるのが

1
2
3
dir="$(date +%Y%m%d)"
 
[ ! -e "$dir.tar.gz” ]

の部分

-gt はシェルスクリプトの比較演算子

-e もおなじ

シェルスクリプトの条件式や演算子におけるメモ

を参考にソースを読むことに

-e の意味は、ファイルが存在するなら

という意味

-gt は〜より大きいという意味

英語の greater than の略

-gt については

#08 条件式を評価してみよう (1)

を参考にしました

!は条件の反転になるので
! -e ならファイルが存在しないのならという意味に

なお
[Sh]簡素なif文は一行で書く[Sh]簡素なif文は一行で書く

でわかったのですが
シェルスクリプトの場合1文で書くときには
if を省けるようです
このため、今回の [] の中身は if の判定でした

このため

1
[ "$dir" -gt "20140101” ]

は日付が 20140101 より大きいのなら
という判定になり

1
[ ! -e "$dir.tar.gz” ]


日付.tar.gz というファイルが存在しないのなら
という判定になります

wordpress 管理画面にアイキャッチ画像の表示

wordpress 管理画面にアイキャッチ画像の表示

管理画面でサムネイル画像を設定できると
投稿が楽になるので設定をします

functions.php にコードを追記すれば可能になります

1
add_theme_support('post-thumbnails');

を追記します

これでカテゴリの下で
アイキャッチ画像の設定ができるようになります

とはいっても最初から素材を用意するのは大変なので
無料写真素材サイト
FOODIE’S FEED

のものを使わせていただくことにします

ちなみに画像のアップロードにはサイズ変更をしておかないと投稿できません

基本的には2MBです

今回は centOS 6.5 での変更になります

1
vim /etc/php.ini


801行めの

1
upload_max_filesize = 2M

1
upload_max_filesize = 2000M

に変更してアップロードできるサイズをあげます

1
post_max_size = 8M

1
post_max_size = 2000M

に変更
これでPOSTするサイズもあげます

ダッシュボードの投稿から
アイキャッチ画像を決定をクリック

ai

ファイルアップロードをクリックし

ai3

ファいるをアップロードしたら
アイキャッチ画像を設定
をクリックします

ai4

これでアイキャッチ画像の設定ができたので
次に
一覧画面でアイキャッチ画像が見えるようにします

page.php の中の

1
<img src="image/tee.jpg"  />

の部分を
wordpress のテンプレに書き換えます

このときにサムネイルがないときのことも考えて
判定をして表示するようにします

判定は

1
2
3
4
5
6
<?php if(has_post_thumbnail()): ?>
   <?php the_post_thumbnail(); ?>
<?php else : ?>
        <img src="<?php echo get_template_directory_uri();?>/img/noimage.png"/>
<?php endif;?>
<?php the_title(); ?></a></li>

となります

1
<?php if(has_post_thumbnail()): ?>

でサムネイルがあるか調べ
あるのなら

1
<?php the_post_thumbnail(); ?>

で表示します

サムネイルなしなら

1
<img src="<?php echo get_template_directory_uri();?>/img/noimage.png"/>

でサムネイル画像の代わりにイメージなし
という画像を表示します

これでリロードすると
一覧画面にサムネイル画像が反映されます

ai5

今回の変更によりコードは以下のようになります

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php get_header();?>
<?php $paged = get_query_var('paged'); ?>
<?php query_posts("posts_per_page=10&paged=$paged"); ?>
<form action="" class="ui-filterable">
  <input type="text" id="keywd" data-type="search" placeholder="お店の名前を入力
">
</form>
<br>
<?php if (have_posts()): while(have_posts()): the_post(); ?>
  <ul data-role="listview" data-filter="true" data-input="#keywd">
    <li class="ui-li-has-thumbnail"><a href="<?php the_permalink(); ?>">
<?php if(has_post_thumbnail()): ?>
   <?php the_post_thumbnail(); ?>
<?php else : ?>
        <img src="<?php echo get_template_directory_uri();?>/img/noimage.png"/>
<?php endif;?>
<?php the_title(); ?></a></li>
  </ul>
<?php endwhile; else: ?>
<p>該当するお店がありません</p>
<?php endif; ?>
<?php get_footer(); ?>

固定ページで投稿記事一覧を表示

固定ページで投稿記事一覧を表示

固定ページへの一覧表示にあたり

[WP]WordPress で固定ページに記事一覧を出力する方法のまとめ

を参考にさせていただきました

今回は投稿記事を最新10件取得します

1
2
<?php $paged = get_query_var('paged'); ?>
<?php query_posts("posts_per_page=10&paged=$paged"); ?>

1
<?php get_header();?>

の下へ書き込みます

次に投稿記事があれば表示するという判定をつけます

1
2
3
4
<form action="" class="ui-filterable">
  <input type="text" id="keywd" data-type="search" placeholder="お店の名前を入力
">
</form>

の下へ

1
2
<br>
<?php if (have_posts()): while(have_posts()): the_post(); ?>

を追記します

そして
投稿記事がなかったときの処理を

1
<?php get_footer(); ?>

の上に書き込みます

今回はお店がないことを表示したいので

1
2
3
<?php endwhile; else: ?>
<p>該当するお店がありません</p>
<?php endif; ?>

これでループで表示できるようになりましたが
まだ表示のための処理が書いてないため
見た目はそのままになりますので
次に投稿記事を反映するようにコードをかえます

今の状態だと

1
2
3
4
5
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/tee.jpg"  />お茶</a></li>
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/cake.jpg"  />ケーキ</a></li>
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/food.jpg"  />和菓子</a></li>
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/cofee.jpg"  />ゼリー</a></li>
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/blead.jpg"  />アイス</a></li>

ですが、ループ表示なので1つあれば十分です

1
<li class="ui-li-has-thumbnail"><a href="shop.html"><img src="image/tee.jpg"  />お茶</a></li>

だけ残して削除します

次に、お茶の部分を投稿記事のタイトル
リンクを投稿記事にかえます

1
 

1
<?php the_title(); ?>

へ変更

1
<a href="shop.html">

1
<a href="<?php the_permalink(); ?>">

へ変更します

これで保存すると投稿記事が一覧で表示されます

page

固定ページへのリンク作成

固定ページへのリンク作成

後々、カテゴリごとに記事一覧をだすけど
まずは投稿記事を一覧表示するようにします

まずは
その前にトップページからアイコンをクリックしたら
固定ページにリンクするようにします

wordpress の固定ページは

1
echo get_page_link();

で取得可能

get_page_php() の詳細については
関数リファレンス/get page link

を参考に

パラメータとして固定ページのIDを入れます
今回の場合 ID=35 なので

home.php の中の
sweet.html
というリンクをかえます

今回も vim の置き換え機能で一度に書き換えます

1
%s/sweet.html/<?php echo get_page_link(35);?>/g

これを実行すると
アイコンをクリックすると
固定ページの一覧にリンクするようになります

現在の home.phpのソースは

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php get_header(); ?>
 
<!-- 1行目 -->
<div class="ui-grid-b">
  <div class="ui-block-a">
 
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/wa.png" alt="" class="ic"><br>和食</a>
  </div>
  <div class="ui-block-b">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/chu.png" alt="" class="ic"><br>中華</a>
  </div>
  <div class="ui-block-c">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/yo.png" alt="" class="ic"><br>洋食</a>
  </div>
</div>
 
<!-- 2行目 -->
<div class="ui-grid-a">
  <div class="ui-block-a">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/cake.png" alt="" class="ic"><br>スイーツ</a>
  </div>
 
  <div class="ui-block-b">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/ramen.png" alt="" class="ic"><br>ラーメン</a>
  </div>
</div>
 
<!-- 3行目 -->
<div class="ui-grid-b">
  <div class="ui-block-a">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img class="ic" src="<?php echo get_template_directory_uri(); ?>/img/camera.png" alt="" ><br>カメラ</a>
  </div>
  <div class="ui-block-b">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/map.png" alt="" class="ic"><br>地図</a>
  </div>
  <div class="ui-block-c">
    <a class="ui-btn ui-corner-all" href="<?php echo get_page_link(35);?>"><img src="<?php echo get_template_directory_uri(); ?>/img/tweet.png" alt="" class="ic"><br>ツイート</a>
  </div>
</div>
<?php get_footer(); ?>

となります

link

link2

次は page.php を編集します

証明写真をUbuntuで作成するアプリ

証明写真を自宅で作成するアプリを
Ubuntuへインストールしました

撮影には ipod touch のカメラ
もしくは Nexus7 のカメラを使用

撮影した写真から作成するには
おうちで証明写真 Gura Shot

を参考に行います

まず、Ubuntu に Gura Shot をインストール

最初に Gura を使う環境を整えます

http://www.gura-lang.org/Download.html

にインストール方法が載っているので
これを参考に行います

まずコンパイルに必要なものをインストール

1
sudo apt-get install build-essential cmake libreadline-dev rpm

次に
https://github.com/gura-lang/gura/releases/download/v0.6.2/gura-0.6.2-src.tar.gz
から
gura-0.6.2-src.tar.gz
をダウンロード

ダウンロードしたディレクトリに移動して

1
tar zxvf gura-0.6.2-src.tar.gz

で展開

1
2
3
cd gura-0.6.2
mkdir build
cd build

でコンパイルのためのディレクトリ作成

1
2
../configure
make

でコンパイル

1
2
sudo ./setup-guest
./build-modules

でモジュールを作成

1
2
sudo make install
sudo ldconfig

でインストールになります

これで Gura の環境ができたので
Gura Shot をダウンロードします

https://github.com/gura-app/gurashot/releases/download/v1.3.0/gurashot-1.3.0.zip

から
Gura Shot をダウンロードします

これで実行は

1
gura gurashot.guraw

でできると思ったのですが
ubuntu 12.04 で行うと

1
2
3
4
gurashot.guraw:6: ImportError: can't find a module named 'wx'
Traceback:
gurashot.guraw:6:
  import(wx)

となってしまいます

原因を調べた結果
Upgraded to Ubuntu 12.04, now import wx.lib.delayedresult fails

によれば

This issue is likely caused by changing directory standards between different versions of python-wx included in the different distributions (11.10 vs 12.04).
となっていて
バージョンが13.10 以降は
参照するディレクトリが違うのが原因のようです

仕方ないので
14.04 で実践することに

インストールまでは同じなので
Ubuntu 14.04 からX11転送で実行します

X11転送を利用したセキュアなリモートapp環境

を参考に設定を確認していきます

Ubuntu のデスクトップの場合
デフォルトでX11転送ができるはずなので

1
vim /etc/ssh/sshd_config

でファイルを開き

/X11
で検索

1
2
X11Forwarding yes
X11DisplayOffset 10

となっているのを確認します

次にssh でX転送ができるようにして接続します

これには -X オプションをつけて接続します

接続したら

1
https://github.com/gura-app/gurashot/releases/download/v1.3.0/gurashot-1.3.0.zip

でファイルをダウンロード

1
unzip gurashot-1.3.0.zip

で解凍し

1
2
cd gurashot-1.3.0/
gura gurashot.guraw

を実行すると無事エラー無く起動しました

grashot