0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linuxの変数

Last updated at Posted at 2022-08-10

変数

bashの処理をする時にデータを格納するものです。
細かいルールはこちらの記事を覗いてみてください

% cat variable.sh
name="Keisuke Honda"

#以下の3通りのやり方がある
1. echo $name

2. echo ${name}

#ベストな書き方
3.echo "${name}"

% cat variable.sh
name="Keisuke Honda"

#文字との組み合わせで使いやすい
echo "${name} is a famous Japanese soccer player."
% chmod 755 variable.sh   #権限実行
% ./variable.sh
Keisuke Honda is a famous Japanese soccer player.

変数と定数

値が変わらない変数のことです。大文字で記述するのが規約であるみたいです。
readonly○○として、変数を定数として設定します。

まず変数を使って実行します。

% cat variable.sh
name="Messi"    
age=35

introduce="He said\"I am ${name}. I am ${age}years old\""    #  ""で囲む時は\をつけます。
echo "${introduce}"

 % ./variable.sh   #実行
He said"I am Messi. I am 35years old"

次に定数を実行します。

# 定数は 大文字+_

readonly CONSTANT_VAR="定数"

echo "${CONSTANT_VAR}"

var="constant ${CONSTANT_VAR}"

#定数を書き換えるとエラー
CONSTANT_VAR="new constant"

unset score
echo "score is ${score}"
unset CONSTANT_VAR

配列

複数の値を変数の中に格納するタンスのような役割をするものです。

% cat array.sh
animal=("Dog""Cat""Monkey")

全要素

echo "${animal[@]}"

echo "${animal}"

# DogCatMonkey
# Dog
# 犬: Dog, 猫: Cat, 猿: Monkey

各要素追加

animal+=("horse" "snake")
echo "${animal[@]}"
# Dog Cat Monkey horse snake

animal=("${animal[@]}" "elephant" )
echo "${animal[@]}"
#Dog Cat Monkey horse snake elephant

各要素の削除

animal=("${animal[@]}" "elephant" )
echo "${animal[@]}"
unset animal[1]

animal[0]="swan"
echo "${animal[@]}"
# swan Monkey horse snake elephant

配列をつなげる

declare -a array1=("A" "B" "C")
array2=("D" "E" "F")

array3=("${array1[@]}" "${array2[@]}")
echo "${array3[@]}"

# 配列の一部
echo "${array3[@]:2:2}"

# 要素の一部
echo "${animal[2]:2:4}"

# A B C D E F
# C D
# nkey

計算

% cat calculation.sh
echo "1 + 3" #文字列

# 和
echo "$(expr 5 + 8)"
echo "$(( 5 + 8 )) "  #推奨

result="$(( 7 * 3 ))"
echo "${result}"
% chmod 755 calculation.sh #権限付与
% ./calculation.sh        
1 + 3
13
13 
21

% cat calculation.sh
# 差
echo "$(expr 5 - 8)"
echo "$(( 3 - 5))"
% chmod 755 calculation.sh #権限付与
% ./calculation.sh  
-3
-2

% cat calculation.sh
# 積
echo "$(expr 5 \* 8)"
echo "$(( 5 * 8 ))"
% chmod 755 calculation.sh #権限付与
% ./calculation.sh  
40
40

% cat calculation.sh
# 商
echo "$(expr 30 / 6)"
echo "$(( 13 / 3))"
% chmod 755 calculation.sh #権限付与
% ./calculation.sh 
5
4

余り

% cat calculation.sh
#余り
echo "$(expr 23 % 7)"
echo "$(( 23 % 7 ))"
% chmod 755 calculation.sh #権限付与
% ./calculation.sh
2
2

特殊な環境変数

以下のような変わった環境変数があります。

$ cat special.sh

#ファイル名
echo "${0}"

# ユーザー名
echo "${USER}"

#実行時間
echo "${SECOND}"

#ランダム
echo "${RANDOM}"

#行番号
echo "${LINENO}"

権限を実行して出力していきます。

$ chmod 755 special.sh #権限付与
$ ./special.sh
./special.sh  #ファイル名
noriaki # ユーザー名
26485 #実行時間
16 #行番号

それぞれ出力していきます。

$ echo $LINENO
62
$ echo $RANDOM
29508
$ echo $USER
noriaki

$RANDOMだとこんな使い方もあります。

$ echo $(( $RANDOM % 2 ))
1
$(( $RANDOM % 5 ))
3
$ echo $(( $RANDOM % 5 ))
0
$ echo $(( $RANDOM % 3 + 1 ))
1
$(( $RANDOM % 3 + 2 ))
4

環境変数の作成

環境変数を作成するには 

export 変数名

を使い、シェル変数から環境変数にできます。
まずシェル変数から出力します。

$ name="Luffy" #シェル変数
$ echo $name
Luffy
$ cat script.sh
#変数
echo "名前は:"
echo $name

echo "悪魔の実は:"
echo $fruits
$ chmod 755  script.sh #権限付与
$ name=Luffy
$ fruits=ゴムゴムの実
$ ./script.sh  #子プロセスで立ち上がっている
名前は:

悪魔の実は:

子プロセスを引き継ぐにはシェル変数を環境変数にします。

$ export name
$ export fruits
$ ./script.sh
名前は:
Luffy
悪魔の実は:
ゴムゴムの実

ファイルの引継ぎ方を見ていきます。

$ cat setting.sh
name="Luffy"
fruits="ゴムゴムの実"

$ cat script.sh
# nameとfruitsを設定
. ./setting.sh

#変数
echo "名前は:"
echo $name

echo "悪魔の実は:"
echo $fruits

$ ./script.sh
名前は:
Luffy
悪魔の実は:
ゴムゴムの実

次に2つのファイルでの引継ぎをします。

$ cat script.sh
# nameとfruitsを設定
. ./setting.sh

#変数
echo "名前は:"
echo $name

echo "悪魔の実は:"
echo $fruits

#環境変数
echo "好きな食べ物は:"
export favorite_food="肉"

#別の処理の呼び出し
./script2.sh

$ chmod 755 script2.sh 
$ ./script2.sh

$ ./script.sh
名前は:
Luffy
悪魔の実は:
ゴムゴムの実
好きな食べ物は:
肉

unsetコマンド

これはシェル変数を削除するコマンドです。

$ name="Luffy" #シェル変数
$ echo $name
Luffy
$ unset name #シェル変数削除
$ echo $name

setコマンド

環境変数やシェル変数などの一覧を表示するコマンドです。

$ set 
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()

# 省略

quote_readline ()
{
    local quoted;
    _quote_readline_by_ref "$1" ret;
    printf %s "$ret"
}

printenvコマンド

環境変数一覧を表示するコマンドです。

$ printenv

envコマンド

環境変数を一時的に設定した状態で実行し、引数なしでenvコマンドを実行すると
環境変数一覧が表示されるコマンドです。

$ env name="chopper" fruits=17 ./script.sh
名前は:
chopper
悪魔の実は:
17
$ echo  $name

色々な環境変数

色々な環境変数を最後に見ていきます。

●HOME
ホームディレクトリを表示

$ echo $HOME
/home/taro

●LANG
使用中の言語表示

$ echo $LANG
C.UTF-8
$ export LANG="ja_JP.UTF-8" #日本語設定

●PWD
カレントディレクトリ表示

/home/taro/linux

●USER
ログインしているユーザー名

$ echo $USER
taro

●PATH
コマンド実行ファイルを格納するコマンド検索パス

$ echo $PATH
/home/taro/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Users/Taro Hashimoto/AppData/Local/Microsoft/WindowsApps:/snap/bin

資料

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?