mikan's technical note

仕事&趣味で実験した小技の備忘録です(Linux,windows,DOS等)

MENU

【shell】bash で キー入力待ち&判定

サンプル

#!/bin/bash

#----- キー入力待ち
echo
echo "【判定方法1】"
echo -n "よかですか?(Yes/No)"
read Key

#----- 入力値の判定
if [ $Key = "Yes" ] || [ $Key = "yes" ] || [ $Key = "Y" ] || [ $Key = "y" ]
then
    echo "よかよ"
else
    echo "どげんしたと?"
fi

#----- キー入力待ち
printf "\n"
printf "【判定方法2】正規表現で\n"
printf "よかろうもん?(Yes/No)"
read Key

#----- 入力値の判定
if [[ $Key =~ ^[Yy]es$ ]] || [[ $Key =~ ^[Yy]$ ]]
then
    echo "しょんなかねぇ"
else
    echo "ダメくさ"
fi

exit 0

実行結果

【判定方法1】
よかですか?(Yes/No)n
どげんしたと?

【判定方法2】正規表現で
よかろうもん?(Yes/No)yes
しょんなかねぇ

【C言語】ポインタを理解するための第一歩(int型)

C未経験なのにCのプログラム改修をやらされている同僚くん…

そんな彼にポインタの基本をわかってもらうために書いたサンプルです
※このあとchar型のポインタと配列でまた混乱している同僚くん…ガンバ!(^^;;

プログラム

sample.c

#include <stdio.h>

int main(void)
{
	int	iNum;
	int	*piNum;

	// コードの表示(実行結果がわかりやすいように。意味はない)
	printf("\n");
	printf("int	iNum;\n");
	printf("int	*piNum;\n");
	printf("\n");

	// 確認
	printf("---------- 確認 ----------\n");
	printf("&iNum :%p\n", &iNum);
	printf("iNum  :%d\n", iNum);
	printf("&piNum:%p\n", &piNum);
	printf("piNum :%p\n", piNum);
	printf("*piNum:%d\n",*piNum);	// piNumは不定なので危険(コケるかも)
	printf("--------------------------\n");

	// 値を設定
	iNum = 555;

	// アドレスを設定(とりあえず NULL を設定)
	piNum = NULL;

	// コードの表示(実行結果がわかりやすいように。意味はない)
	printf("\n");
	printf("iNum = 555;\n");
	printf("piNum = NULL;\n");
	printf("\n");

	// 確認
	printf("---------- 確認 ----------\n");
	printf("&iNum :%p\n", &iNum);
	printf("iNum  :%d\n", iNum);
	printf("&piNum:%p\n", &piNum);
	printf("piNum :%p\n", piNum);
//	printf("*piNum:%d\n",*piNum);	// piNumはNULLなのでコケる
	printf("--------------------------\n");

	// アドレスを設定
	piNum = &iNum;

	// コードの表示(実行結果がわかりやすいように。意味はない)
	printf("\n");
	printf("piNum = &iNum;\n");
	printf("\n");

	// 確認
	printf("---------- 確認 ----------\n");
	printf("&piNum:%p\n", &piNum);
	printf("piNum :%p\n", piNum);
	printf("*piNum:%d\n",*piNum);
	printf("--------------------------\n");

	// 値を設定
	*piNum = 777;

	// コードの表示(実行結果がわかりやすいように。意味はない)
	printf("\n");
	printf("*piNum = 777;\n");
	printf("\n");

	// 確認
	printf("---------- 確認 ----------\n");
	printf("&piNum:%p\n", &piNum);
	printf("piNum :%p\n", piNum);
	printf("*piNum:%d\n",*piNum);
	printf("iNum  :%d\n",iNum);	// ここが重要
	printf("--------------------------\n");

	return 0;
}

実行結果

int	iNum;
int	*piNum;

---------- 確認 ----------
&iNum :0x7ffcc0cafd9c
iNum  :21958
&piNum:0x7ffcc0cafda0
piNum :0x7ffcc0cafe90
*piNum:1
--------------------------

iNum = 555;
piNum = NULL;

---------- 確認 ----------
&iNum :0x7ffcc0cafd9c
iNum  :555
&piNum:0x7ffcc0cafda0
piNum :(nil)
--------------------------

piNum = &iNum;

---------- 確認 ----------
&piNum:0x7ffcc0cafda0
piNum :0x7ffcc0cafd9c
*piNum:555
--------------------------

*piNum = 777;

---------- 確認 ----------
&piNum:0x7ffcc0cafda0
piNum :0x7ffcc0cafd9c
*piNum:777
iNum  :777
--------------------------

ポイント

piNum = &iNum;
piNum = 777;

を実行すると、
iNum の値も 777 になる
仕組みを理解しましょう

piNum は iNum のアドレス(メモリ上の番地)を指している
ので、*pinum は iNum と同じなのです

次回は、char型のポインタについて