シェル学習の簡単な記録
拡張子はスクリプトの実行に影響しない ため、 vi / vimを使用して新しいファイルtext.sh、shを 作成します。
#!:どのインタプリタを使用するかをシステムに指示する
echo:ウィンドウにテキストを出力する
#!/bin/bash
echo "Hello World!"
chomod:スクリプトに実行可能権限を持たせます。/:
現在のディレクトリでスクリプトを実行します。
chmod +x test.sh
./test.sh
スクリプトファイル名としてインタプリタを直接実行します
/bin/sh test.sh
変数を定義します:your_name =“ aniu”(等号の前後にスペースを入れることはできません)
$(ls / etc)内のファイル:etcの下のファイル名をループします
your_name="aniu"
for file in 'ls /etc'
$ your_name:変数を使用
your_name="aniu"
echo $your_name
読み取り専用:変更された変数変数は読み取り専用です変数変数値は変更できません
your_name="aniu"
readonly your_name
未設定:変数を削除します(読み取り専用で変更された変数は削除できません)
unset your_name
シェルを実行する場合、次の3種類の変数があります。
- ローカル変数
はスクリプトまたはコマンドで定義されます - 環境変数
シェルによって開始されたプログラムを含む、すべてのプログラムにアクセス可能な環境変数 - シェル変数シェル
の正常な動作を保証するためにシェルプログラムによって設定される特別な変数
シェルコマンドラインパラメータ
$0 当前脚本文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
#!/bin/bash
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
シェル文字列
一
重引用符:変数は存在できません二重引用符:変数が存在する場合はエスケープ文字を使用できます
str='string'
str="string\"$your_name\""
str="string"$your_name""
str="string${your_name}"
//获取字符串长度
echo ${
#str}//6
//提取字符串
echo ${
str:1:4} //trin
//查找‘r’的位置
echo `expr index "$str" r`//2
配列を定義する
arr_name=(1 2 3)
//单独定义数组分量
arr_name[0]=1
//读取数组元素
your_name=${
arr_name[0]}
//使用@符号获取数组所有元素
echo ${
arr_name[@]}
//获取数组元素个数
lengh=${
#arr_name[@]}
シェルコメント
//注释符号
#
//花括号 标记为函数 没有地方调用可以实现 多行注释
{
}
chmod + x test.sh
./test.sh 12
シェル受け渡しパラメーター
//特殊字符处理参数
$#
$*
$$ 脚本运行当前进程号
$! 后台运行的最后一个进程ID号
echo "执行的文件名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "参数的个数为$#"
echo "传递参数作为一个字符串显示$*"
シェルの基本操作
expr式計算ツール
2 + 2式と演算子の間にはスペースが必要です
+
-
* //注意 *前面加\ (反斜杠)
/
%
=
==
!=
sum=`expr 2 + 2`
echo "两数之和:$sum"
mul=`expr 2 \* 2`
echo "两数之积:$mul"
if [ 2 == 2 ]
then
echo "2 等于 2"
fi
if [ 2 != 3 ]
then
echo "2 不等于 3"
fi
関係演算子
-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
if [ 2 -le 3 ]
then
echo "2 小于等于 3"
fi
ブール演算子
! //非运算
-o //或运算
-a //与运算
論理演算
&&
||
文字列演算子
= //字符串是否相等
!= //两个字符串是否不相等
-z //字符串长度是否为 0
-n //字符串长度是否不为0
str //字符串是否不为空
ファイルテストオペレーター
-b file //是否块设备文件
-c file //是否字符设备文件
-d file //是否目录
-f file //是否普通文件
-g file //是否设置了SGID位
-k file //是否设置了粘着位Sticky Bit
-p file //是否有名管道
-u file //是否设置SUID位
-r file // 是否可读
-w file //是否可写
-x file //是否可执行
-s file //是否为空
-e file //是否存在
file="/var/www/aniu/text.sh"
if [ -r file ]
then
echo "file 可读"
else
echo "file 不可读"
fi
読み取り:標準入力から読み取ります
#! /bin/bash
read name
echo "$name is a test"
//-e 开启转义
echo -e "OK \n"
//-c 不换行
echo -e "OK \c"
//显示结果定向直文件
echo "aniu" >myfile
//显示当前日期
echo `date`
//[]中执行基本运算 不能有空格
result=[2*5]
if con1
then
com1
elif con2
com2
else
comN
fi
//for循环
for var in item item2
do
com1
done
//while循环
while con1
do
com1
done
例子case......
#!/bin/sh
int=1
while(( $int<=5 ))
do
echo $int
//bash let 命令
let "int++"
done
例子case.....
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
//case
echo "输入1到5之间的数字"
echo "输入的数字为:"
read aNum
case $aNum in
1) echo "选择1"
;;
2) echo "选择2"
;;
*) echo "没有输入"
;;
esac
//跳出循环
#!/bin/bash
while :
do
echo -n "输入1-5"
read aNum
case $aNum in
1|2|3) echo "输入:$aNum"
;;
*) echo "结束"
break
;;
esac
done
シェル機能
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
//$? 获取返回值
echo "输入的两个数字之和为 $? !"
-----------------------------------
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
//n>=10 用${n}获取参数
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
#すべてのjavaプロセスを閉じるps -ef | grep java | grep -v "grep" | awk '{print $ 2}' | xargs kill -9
Windowsで編集し、実行のためにLinuxシステムにアップロードします。.shファイルの形式はdosformat
vi test.sh:set
ff = unixです。